簡體   English   中英

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;

功能的實現如下,其只是用於演示/試用目的的簡單內容。.:

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路由的參數函數中間件.. 但是,我有一個問題,第二個函數中的數據是“未定義的”,我不明白為什么這不起作用,與函數提升有關嗎? 也許我必須定義我的功能嗎? 還是我的回調錯誤?

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將您分配之前調用demores.locals.myvar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM