Node.js Express Как передавать данные между промежуточным ПО? - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь отправить данные в MEAN Stack в Node / Express с одного промежуточного программного обеспечения на другое, у меня настроен маршрут, в котором у меня есть две именованные функции, одна запрашивает некоторые данные и передает их второй функции, которая должна выполнить некоторая другая обработка данных ... вот моя функция маршрутизации, которая имеет 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);
}

Я видел этот пример где-то ... однако они реализовали его иначе, они просто определяли анонимные функции одну за другой, разделенные запятыми, но я хотел бы использовать именованные функции и использовать их в файле маршрута в качестве параметров для промежуточной функции экспресс-маршрутизации .. Однако у меня проблема в том, что данные во второй функции «неопределенные», я не понимаю, почему это не работает, это связано с подъемом функции? Может быть, я должен определить свои функции в противном случае? Или мой обратный звонок неправильный?

1 Ответ

0 голосов
/ 03 июля 2018

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

...