node.js - 如何有条件地调用路由器级中间件?
问题描述
我有两个函数来验证请求正文,validation1
和validation2
. 现在我的任务是,在解析传入的请求正文后,我需要使用validation1
if 用户角色premium user
验证数据,否则我将使用 验证数据validation2
。
我试图像下面这样解决它,但无济于事。由于某种原因,验证中间件没有被调用。
const express = require('express');
const router = express.Router();
const { userController } = require('./controllers');
router.route('/check').post(
(req, res, next) => {
if (req.role === 'premium user') {
validation1(someInformation);
} else {
validation2(someInformation);
}
next();
},
userController.check
);
const validation1 = (someInformation) => (req, res, next) => {
// codes
return next();
}
const validation2 = (someInformation) => (req, res, next) => {
// codes
return next();
}
任何帮助,将不胜感激。提前致谢。
解决方案
您应该将回调函数传递next
给验证函数。
还要更改您的验证功能,如下面的代码:
const express = require('express');
const router = express.Router();
const { userController } = require('./controllers');
router.route('/check').post(
(req, res, next) => {
if (req.role === 'premium user') {
validation1(req, res, next);
} else {
validation2(req, res, next);
}
},
userController.check
);
const validation1 = (req, res, next) => {
// codes
return next();
}
const validation2 = (req, res, next) => {
// codes
return next();
}
推荐阅读
- php - 如何检查/查找字符串中是否有多个字母 | PHP
- python - 使用阈值对点是否在指定区域内进行分类 - python
- python - 编译 QML 源代码以使用 PySide2 进行保护
- c# - mongodb C# 使用查找和方面进行计数
- laravel - 如何将html表格行与1个参考和多个项目结合起来?
- pandas - 在 Dask 中,如何删除未在另一列的所有值中重复的数据?
- sql - 为什么我的查询可以使用 RIGHT() 和 LEFT() 函数,但不能使用 LIKE 谓词?
- vba - 搜索表格旁边的标题样式时 Range.Find 失败
- java - 将二维数组传递给另一个类,但无法返回对象
- javascript - 正则表达式 - 没有连续的特殊字符