Node.js Express中间件之间如何传递数据?

Node.js Express How to pass data between middleware?

我正在尝试将 Node/Express 中的 MEAN Stack 中的数据从一个中间件发送到另一个中间件,我设置了一条路由,其中​​我有 2 个命名函数,一个查询一些数据并将其传递给第二个应该对数据进行一些其他处理的函数...这是我的路由函数,它在 "get" 方法上具有 2 个中间件函数:

function DemonstratorRoutes(router) {
    var DemonstratorController = require('../controllers/DemonstratorController')
    router.route('/Demonstrator')
      .get(DemonstratorController.list_all_Demonstrator, DemonstratorController.doSomeStuff)
module.exports = DemonstratorRoutes;

功能实现如下,只是简单的演示/试用而已..:[=​​13=]

exports.list_all_Demonstrator = function(req, res,next) {
    //console.log(req.body)
    Demonstrator.find({},  function(err, demo) {
        if (err){
            console.log(err);}
        else {
            res.locals.myvar = demo;    
        }
    });
    next();
};

exports.doSomeStuff = function(req,res,next) {
    var data;
    data = res.locals.myvar
    console.log("Dies ist 2te Funktion:", data);
    res.send(data);
}

我在某个地方看到过那个例子...但是他们确实以其他方式实现了它,他们只是一个接一个地定义了匿名函数,用逗号分隔,但我想使用命名函数并在路由文件中使用它们作为 Express 路由功能中间件的参数.. 但是,我的问题是第二个函数中的数据是"undefined",我不明白为什么这不起作用,与函数提升有关吗?也许我必须以其他方式定义我的功能?还是我的回调有误?

Demonstrator.find 是一个异步函数,所以你应该在它的回调中调用 next 像这样

exports.list_all_Demonstrator = function(req, res,next) {
//console.log(req.body)
Demonstrator.find({},  function(err, demo) {
    if (err){
        console.log(err);
    }
    else {
        res.locals.myvar = demo;    
    }
    next(); // <------------
});

};

exports.doSomeStuff = function(req,res,next) {
    var data;
    data = res.locals.myvar
    console.log("Dies ist 2te Funktion:", data);
    res.send(data);
}

否则 next 将在您将 demo 分配给 res.locals.myvar

之前被调用