我知道在经过这样的路由后我可以链接中间件功能
const express = require('express');
const router = express.Router();
router.post('/', middlewareFunction1, middlewareFunction2, controllerFunction);
module.exports = router;
我想知道是否只能调用一个功能(称为网关)
router.post('/', gatewayFunction1);
并且此功能可以链接所有这些方法
const controller = require('../controllers/controller');
function gatewayFunction1(request, response, next) {
// validate route
// do other middleware stuff
// call controller.function1
}
module.exports = {
gatewayFunction1,
};
我为什么要这样做?我正在考虑将中间件逻辑与路由分开。该网关只应在路由之后和调用路由器之前执行。
我试图返回一个函数数组(示例代码)
function gatewayFunction1(request, response, next) {
return [(request, response, next) => {
console.log('called middleware 1');
next();
}, (request, response, next) => {
console.log('called middleware 2');
next();
}, (request, response, next) => {
response.status(200).json({
message: 'that worked',
});
}];
}
但是当我调用此api路由时,我没有任何反应
无法得到任何回应
因此它将永远加载。有没有办法将这些中间件功能链接到另一个功能中?
答案 0 :(得分:2)
您的gatewayFunction1
除了返回数组外什么也不做。
只需使用router
。
const express = require('express');
const gatewayFunction1 = express.Router();
gatewayFunction1.use(middlewareFunction1, middlewareFunction2, controllerFunction);
module.exports = gatewayFunction1;
然后
const gatewayFunction1 = require('...'); // where you define gatewayFunction1
router.post('/', gatewayFunction1);
答案 1 :(得分:1)
中间件应该是一个函数,并且您正在返回一个数组,如果不调用下一个函数,它将陷入困境。我不喜欢将它们组合在一起的整个想法,但我认为最好的方法是将所有中间件函数导入一个函数中,然后分别调用它们,然后将该函数用作组合的中间件。