如何将参数发送到Express路由中的中间件功能?

时间:2017-09-15 13:01:55

标签: node.js express

我正在开发一个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没有定义。

任何人都可以帮助/建议如何实现这一点。 如果需要在此处添加任何其他详细信息,请与我们联系。

2 个答案:

答案 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'])