【问题标题】:How to send parameters to the middleware functions in Express routing?如何在 Express 路由中向中间件函数发送参数?
【发布时间】:2018-02-24 16:27:53
【问题描述】:

我正在做一个 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 questions 和其他文章,发现我可以这样做:

[m.functionA('data'), m.functionB('data'), m.functionC('data')]

但是在执行此操作时,我得到了 req, res 未定义的错误。

任何人都可以帮助/建议如何实现这一点。 让我知道是否需要在此处添加任何其他详细信息。

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    如果你想使用m.functionA('data'),Express 中间件中的一个常见范例是创建一个以参数为参数的函数,并返回一个中间件函数

    function functionA(customParameter) {
      return function(req, res, next) {
        // code
      }
    }
    

    内部函数(被返回的)可以访问customParameterreq/res/next

    【讨论】:

    • 我正在尝试根据您提供的示例构建一个异步函数,但它不起作用。你能提供一个关于它的外观的提示吗?我收到一条错误消息,例如:需要回调函数但得到了 [object Promise]
    • 没关系。在this post得到答案
    【解决方案2】:

    您可以使用apply 使用您喜欢的参数调用该函数

    function getProducts(list) {
      console.log(list);
    }
    
    getProducts.apply(null,['foo','bar'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-14
      • 2015-11-12
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多