Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Работа с middleware next() (https://javascript.ru/forum/node-js-io-js/57492-rabota-s-middleware-next.html)

Velidan 05.08.2015 23:08

Работа с middleware next()
 
Доброй ночи уважаемые коллеги. Помогите пожалуйста разобраться с middleware в express и передачей результат работы функции на другой участок посредством next().

Я не очень понимаю как это работает. Из документации понял, что мы назначаем пре-хукер для какого-то запроса урл (например: /user) .
Допустим у нас вызывается какой-то шаблон. Перед рендером шаблона выполняется мидлвер - и передается next() - результат дальше.

На практике я не понимаю вообще. Пытаюсь сделать вот что:

module.exports = function (server, db) {
    'use strict';
    var module = {};

    module.auth = function (req, res, next) {

        var options = {
            criteria: { login : req.body.login }
        },
           user;


        user = User.load(options, function (err, user) {
            if (err) { return next(err); }
            if (!user) { return next(new Error('Failed to load User ' +             options.criteria)); }
            req.user = user;
            user = user;

            next();
 
        });


console.log(user);



        if (req.body.password === user.password) {
            console.log('Совпадает');
        } else {
            console.log('Неправильный пароль');
        }

    };

 
    module.pickle = function(err, next) {

        console.log('CATCH');
        next();
    };

    return module;

};


У меня есть результат выборки с базы в методе user.load (данные там точно есть). Я пытаюсь передать эти данные дальше в следующую функцию через next() но ничего не передается и CATCH не выводится, к сожалению.

Также, почему-то не присваивается сам результат user - в переменную user, которая объявлена выше. (Консоль выводит - undefined). Есть подозрения, что колбек выборки из бд исполняется в другом модуле, который не знает о моей переменной и следовательно ей ничего не присваивает.

Если это так, то как мне правиль передать данные дальше в следующие функции, скажем, для валидации?


Заранее спасибо за любую помощь.


Часовой пояс GMT +3, время: 09:35.