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

时间:2018-07-03 15:21:52

标签: javascript node.js express callback 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;

功能的实现如下,它只是简单的东西,用于演示/试用的目的..:

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路由功能中间件 但是,我遇到的问题是第二个函数中的数据是“未定义的”,我不明白为什么这不起作用,与函数提升有关吗?也许我必须定义我的功能吗?还是我的回调错误?

1 个答案:

答案 0 :(得分:1)

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