我正在开发一个MEAN项目,我们有一些像这样定义的api路由:
//products.controller.js
var express = require('express');
var router = express.Router();
const m = require('../../middlewares');
router.get('/products', [m.functionA, m.functionB, m.functionC], getProducts);
router.post('/products', [m.functionA, m.functionB, m.functionC], addNewProduct);
module.exports = router;
function getProducts(req, res) {
//code
}
function addNewProduct(req, res) {
//code
}
..............
//middlewares.js
function functionA(req, res, next) {
//code
}
function functionB(req, res, next) {
//code
}
function functionC(req, res, next) {
//code
}
现在我可以访问req,res和next。如何将自定义参数传递给这些中间件函数?
我查看了一些SO问题和其他文章,发现我可以这样做:
[m.functionA('data'), m.functionB('data'), m.functionC('data')]
但是在这样做时,我得到的错误是req,res没有定义。
任何人都可以帮助/建议如何实现这一点。 如果需要在此处添加任何其他详细信息,请与我们联系。
答案 0 :(得分:5)
如果你想使用m.functionA('data')
,Express中间件之间的一个常见范例是创建一个以参数为参数的函数,并返回一个中间件函数:
function functionA(customParameter) {
return function(req, res, next) {
// code
}
}
内部函数(返回的函数)可以访问customParameter
以及req/res/next
。
答案 1 :(得分:-1)
您可以使用apply
使用您喜欢的参数调用该函数function getProducts(list) {
console.log(list);
}
getProducts.apply(null,['foo','bar'])