验证检查后执行验证中间件
execute validation middleware after validation checks
我想创建一个 Express REST API 并想验证请求参数和请求正文。如果一切正常我想调用控制器逻辑。
我的验证中间件是
const { validationResult } = require('express-validator/check');
module.exports = (req, res, next) => {
const validationErrors = req.validationResult();
if (!validationErrors.isEmpty()) {
// send a 400
}
next();
}
并且我在调用控制器之前在我的路线中使用它。这是我的 topics.js 路线文件
的片段
const validation = require('../middleware/validation.js');
const { check } = require('express-validator/check');
router.get('/', topicsController.getAllTopics);
router.get('/:topicId', [
check('topicId').isUUID()
], validation, topicsController.getTopicById);
router.post('/', authenticationCheck, authorizationCheck, [
check('parentTopicId').isUUID() || check('parentTopicId').isNull(), // check if it's a UUID. If not, check if it's null
!check('name').isEmpty(), // is it not empty?
], validation, topicsController.createTopic);
router.put('/:topicId', authenticationCheck, authorizationCheck, [
check('topicId').isUUID(),
check('parentTopicId').isUUID() || check('parentTopicId').isNull(),
!check('name').isEmpty(),
], validation, topicsController.updateTopic);
router.delete('/:topicId', authenticationCheck, authorizationCheck, [
check('topicId').isUUID()
], validation, topicsController.deleteTopic);
我试图通过文档了解它
https://express-validator.github.io/docs/#basic-guide
但是在启动 API 时出现此错误
Error: Route.post() requires a callback function but got a [object
Boolean]
看来我无法先传入数组,然后是验证中间件,然后是控制器。
有没有办法修复路由文件?我不想在我的控制器文件中处理验证逻辑。我觉得这个应该早做。
您需要使用 oneOf 检查条件参数。
在你的路由中你使用 check('parentTopicId').isUUID() || check('parentTopicId').isNull()
但是 returns 布尔值和表达式需要一个中间件。 oneOf
专为此打造。
此外,您应该将 !check
替换为 check('name').not().isEmpty()
。
我想创建一个 Express REST API 并想验证请求参数和请求正文。如果一切正常我想调用控制器逻辑。
我的验证中间件是
const { validationResult } = require('express-validator/check');
module.exports = (req, res, next) => {
const validationErrors = req.validationResult();
if (!validationErrors.isEmpty()) {
// send a 400
}
next();
}
并且我在调用控制器之前在我的路线中使用它。这是我的 topics.js 路线文件
的片段const validation = require('../middleware/validation.js');
const { check } = require('express-validator/check');
router.get('/', topicsController.getAllTopics);
router.get('/:topicId', [
check('topicId').isUUID()
], validation, topicsController.getTopicById);
router.post('/', authenticationCheck, authorizationCheck, [
check('parentTopicId').isUUID() || check('parentTopicId').isNull(), // check if it's a UUID. If not, check if it's null
!check('name').isEmpty(), // is it not empty?
], validation, topicsController.createTopic);
router.put('/:topicId', authenticationCheck, authorizationCheck, [
check('topicId').isUUID(),
check('parentTopicId').isUUID() || check('parentTopicId').isNull(),
!check('name').isEmpty(),
], validation, topicsController.updateTopic);
router.delete('/:topicId', authenticationCheck, authorizationCheck, [
check('topicId').isUUID()
], validation, topicsController.deleteTopic);
我试图通过文档了解它
https://express-validator.github.io/docs/#basic-guide
但是在启动 API 时出现此错误
Error: Route.post() requires a callback function but got a [object Boolean]
看来我无法先传入数组,然后是验证中间件,然后是控制器。
有没有办法修复路由文件?我不想在我的控制器文件中处理验证逻辑。我觉得这个应该早做。
您需要使用 oneOf 检查条件参数。
在你的路由中你使用 check('parentTopicId').isUUID() || check('parentTopicId').isNull()
但是 returns 布尔值和表达式需要一个中间件。 oneOf
专为此打造。
此外,您应该将 !check
替换为 check('name').not().isEmpty()
。