[英]Passing variables to the next middleware using next() in Express.js
[英]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.