gpt4 book ai didi

javascript - 验证检查后执行验证中间件

转载 作者:行者123 更新时间:2023-11-30 19:43:05 25 4
gpt4 key购买 nike

我想创建一个 Express REST API 并想验证请求参数和请求正文。如果一切正常,我想调用 Controller 逻辑。

我的验证中间件是

const { validationResult } = require('express-validator/check');

module.exports = (req, res, next) => {
const validationErrors = req.validationResult();

if (!validationErrors.isEmpty()) {
// send a 400
}

next();
}

我在调用 Controller 之前在我的 route 使用它。这是我的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]

所以我似乎无法先传入数组,然后是验证中间件,然后是 Controller 。

有没有办法修复路由文件?我不想在我的 Controller 文件中处理验证逻辑。我认为这应该在之前完成。

最佳答案

您需要使用 oneOf检查条件参数。

在您的 route ,您使用 check('parentTopicId').isUUID() || check('parentTopicId').isNull() 但它返回一个 bool 值并表示需要一个中间件。 oneOf 是专门为此构建的。

您还应该将 !check 替换为 check('name').not().isEmpty()

关于javascript - 验证检查后执行验证中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55200807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com