Подтвердить что ты не робот

Как передать переменные из промежуточного ПО Connect в приложение app.get?

Я хотел бы создать вид фильтра before, который позволяет мне сделать текущего пользователя доступным во всех действиях. Подход followint работает хорошо, и мне даже не нужно объявлять глобальную переменную:

app.use(function(req, res, next){
    if(req.session.user_id){
        /* Get user from database
           and share it in a variable
           that can be accessed frooom ...
        */
        User.find({ /* ... */ }, function(err, users){
            if(users.length == 1){
                req.current_user = users[0];
            }
            next();
        });
    }
    else{
        next();
    }
});

app.get('/', function(req, res){
    // ... here!!
    console.log(req.current_user);
    res.render('index', {
        current_user: req.current_user,
    });
});

Но я до сих пор не уверен, нормально ли манипулировать req, потому что я не знаю, правильно ли изменить что-то, что не принадлежит мне? Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Это общий подход к расширению req с помощью сеанса или пользовательского объекта

Например, см. следующие примеры:

Ответ 2

Идите вперед и привяжите свойства к req! Когда я впервые начинал работу с Node.js и JavaScript, это было очень странно для меня (исходя из преимущественно фона С++). Это, однако, вполне естественно, учитывая прототип объектной модели JavaScript. После того, как вы почувствуете себя комфортно, вы поймете, что вы можете делать мощные вещи в сжатом коде.

Я разработчик Passport (упомянутый предыдущим комментатором). Если вы планируете разрабатывать промежуточное программное обеспечение, которое можно повторно использовать в приложениях, я советую обратить внимание на то, как вы называете свойства, которые вы добавляете в req или res, чтобы избежать любого потенциального конфликта с другим промежуточным программным обеспечением в то же приложение.

Например, Passport устанавливает user в req.user, но дает возможность изменить это (например, приложение может сказать, что оно установлено на req.currentUser, например.). Внутренние, частные переменные привязаны к свойству req._passport.