簡體   English   中英

將變量傳遞給 express.js 中 req 中的下一個中間件

[英]passing variable to next middleware in req in express.js

我正在嘗試通過req object 將變量傳遞給下一個中間件。 從數據庫中獲取一些數據並將該數據傳遞給請求下一個中間件使用。

User.findone({ _id: someId })
    .then(user => { req.user = user })
    .catch(err => {  })

在那之后然后捕獲塊我正在使用next() 因此,對於下一個中間件,我得到 req.user 未定義。 但是如果我在req.user = user like .then .then(user=> {req.user = user; next()})之后通過next() function ,那么我得到req.user一個有效用戶 object 到用於下一個中間件。 這種行為的原因是什么?

那是因為User.findOne function 是異步的。 function 的結果僅在then塊中已知。

const middleware = (req, res, next) => {
    User.findOne({ _id: someId })
        .then(user => {
            req.user = user;
        })
        .catch(err => { });
    next(); // If you put next() here, the request will go straight to the next middleware without waiting for User.findOne() to complete.
};
const middleware = (req, res, next) => {
    User.findOne({ _id: someId })
        .then(user => {
            req.user = user;
            next(); // Putting next() here is correct
        })
        .catch(err => {
            next(err); // Remember to handle error to avoid hanging the request
        });
};

then...User.findone promise 解析后調用。 因此,如果您將next()放在then之外,它將在then之前調用。

您可以在promise-basics閱讀更多詳細信息

或者嘗試使用async-await ,因為它看起來更簡單。

暫無
暫無

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

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