我已經學習了 2 門 MEAN 課程(MongoDB、Express、Angular、Node.js),它們創建了一個簡單的博客,并且在這兩門課程中都從未使用過 next() 方法。
可以嗎?兩個專案都正常作業。
我是否必須在沒有 next() 方法的情況下進一步撰寫代碼,或者我必須開始使用它?
我讀過沒有'return next()'的函式可以被呼叫兩次或類似的東西。
請指教。
router.post('/dashboard', passport.authenticate('jwt', { session: false }),
(req, res) => {
try {
let newPost = new Post({
category: req.body.category,
title: req.body.title,
photo: req.body.photo,
text: req.body.text,
author: req.body.author,
date: req.body.date
});
Post.addPost(newPost, (err, user) => {
if (err) {
res.json({success: false, msg: `Post has not been added. ${err}`})
} else {
res.json({success: true, msg: 'Post was added.'})
}
})
} catch (err) {
const error = (res, error) => {
res.status(500).json({
success: false,
message: error.message ? error.message : error
})
}
console.log('error routes/auth POST', res, error)
}
})
uj5u.com熱心網友回復:
next()當您希望繼續路由到其他請求處理程式時具有特定用途。它最常用于中間件。例如,這里有一個中間件,它記錄傳入的請求路徑,然后繼續路由到其他可能也匹配此特定請求的請求處理程式:
app.use((req, res, next) => {
console.log(`path=${req.path}, method=${req.method}`);
next();
});
另一方面,如果您只是在撰寫一個請求處理程式,它只是發送回應并且不需要繼續路由到其他請求處理程式,那么您不需要宣告或使用next如下:
app.get("/greeting", (req, res) => {
res.send("hi");
});
我是否必須在沒有 next() 方法的情況下進一步撰寫代碼,或者我必須開始使用它?
如果您在任何情況下都不想繼續路由到其他請求處理程式,那么您不需要使用next().
我讀過沒有'return next()'的函式可以被呼叫兩次或類似的東西。
那不是對那個問題和答案的正確解釋。沒有很好地說明的一點是,如果您正在使用對next()AND的呼叫,那么您的代碼可以在您的函式的其余部分運行時執行,那么您將需要一個return陳述句來阻止您的函式的其余部分執行。這在if陳述句中最常見,例如:
app.use((req, res, next) => {
// check for auth and continue routing if authenticated already
if (req.session && req.session.isAuthenticated) {
next();
return;
}
res.redirect("/login");
});
在這種情況下,呼叫next()允許 Express 繼續路由到其他請求處理程式,但它不會停止執行此函式的其余部分。要做到這一點,你要么必須把它if變成一個,if/else或者你必須return像我展示的那樣插入一個。否則,它會呼叫next()和呼叫res.redirect("/login");這不是你想要的。
PS 在個人編碼風格的注釋中,我不使用,return next()因為該編程結構意味著從next()您要回傳的呼叫中有一個有意義的回傳值。沒有有意義的回傳值,事實上,請求處理程式并不關心回傳值。因此,即使代碼不那么緊湊,我還是更喜歡將 放在return;下一行,而不是暗示此處使用了實際的回傳值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/378347.html
