【发布时间】:2022-01-08 23:49:43
【问题描述】:
我的 Express API 公开了一个 POST 端点来创建用户,我需要在将数据插入数据库之前对其进行验证,我有两种方法:
方法 1:在控制器中包含模型的验证,并对每个模型重复:
// controllers/users.js
exports.createUser = async function (req, res) {
const { username, email, password } = req.body;
/* validation logic */
/* interact with db */
方法二:将验证逻辑移至专用中间件:
// middleware/validators.js
exports.validateArticle = function (req, res, next) {};
exports.validateComment = function (req, res, next) {};
exports.validateUser = function (req, res, next) {
const { username, email, password } = req.body;
/* validation logic */
if (!isValid) {
return res.statusCode(400);
}
next();
};
// routes/users.js
const { validateUser } = require('../middlewares/validators');
router.route('/').post(validateUser, createUser);
我对方法 2 的担忧是,一种端点方法的逻辑会分散在许多文件中,但是这些方法中的哪一种遵循最佳实践?
【问题讨论】:
-
我个人喜欢为每个关注点分开文件,我认为你声明快速路由器的地方看起来很干净
标签: javascript node.js express middleware