【问题标题】:Node.js Express How to pass data between middleware?Node.js Express 如何在中间件之间传递数据?
【发布时间】:2018-12-11 23:26:24
【问题描述】:

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

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

【问题讨论】:

  • 只是为了不让你的生活过于复杂,看看Express Routing。有更简单的方法可以做到这一点。

标签: javascript node.js express callback middleware


【解决方案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 之前被调用

【讨论】:

  • 哇非常酷,只需将 next() 放在函数中,现在它可以工作了,谢谢。
猜你喜欢
  • 2016-04-20
  • 2016-03-24
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
相关资源
最近更新 更多