【发布时间】:2019-01-12 14:18:27
【问题描述】:
我把nodeJs app分成MVC架构 型号 控制器 服务 路由器 工具 日志 我的问题是我可以在服务层或控制器层中对 rest api 进行验证。我正在使用 express 模块,我想使用 express-validater 模块进行验证。哪种方法更好?
【问题讨论】:
标签: node.js model-view-controller
我把nodeJs app分成MVC架构 型号 控制器 服务 路由器 工具 日志 我的问题是我可以在服务层或控制器层中对 rest api 进行验证。我正在使用 express 模块,我想使用 express-validater 模块进行验证。哪种方法更好?
【问题讨论】:
标签: node.js model-view-controller
2020 年 6 月 26 日更新
您可以在您的架构中添加另一个文件夹(validation)。此文件夹应包含验证中间件
/validation/auth.js
exports.signup = [
check('email').isEmail(),
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
else next();
}
];
// more middlewares
现在在您的 route 文件中,您可以在控制器层之前使用所需的验证中间件。
const express = require('express');
const { check } = require('express-validator/check');
const validate = require('../validation/auth');
const authController = require('../controllers/auth');
const router = express.Router();
router.post('/signup', validate.signup, authController.postSignup);
module.exports = router;
这样你就进入了控制器层,只有验证成功。
【讨论】:
我不了解每个人,但我通常将我的 http 验证信息保存在我的控制器所在的目录中。如果这是您的设置,我会将它们放在 items 目录中。
- controllers/
- items/
- index.js
- validations.js
这是因为验证非常具体地与items 端点相关联。例如,我使用其他验证来插入数据存储。
这样的东西应该会让它们更容易找到,并且不需要那么烦人,因为它们在同一个目录中。
【讨论】: