好的,所以我制作了一個中間件來檢查用戶是否已經將他們的資料提交到表單,如果為真;如果他們希望這樣做,會將他們重定向到一個錯誤頁面和一個鏈接以訪問他們以前的結果。這是我寫的中間件:
module.exports.isRevisit = async (req, res, next) => {
const visitors = await Visitor.find({});
for (const visitor in visitors) {
if (visitor.session === visitors.session) {
const redirectedVisitor = visitors[visitor];
return res.render("error", { redirectedVisitor });
} else {
next();
}
}
};
這是我放置中間件的路線:
app.post("/home", isRevisit, async (req, res, next) => {
const date = new Date();
const today = date.getDate();
const visitor = new Visitor({
input: req.body.input,
Date: today,
session: req.sessionID,
});
await visitor.save();
const goodVisitorsCount = await Visitor.count({ input: "good", Date: today });
const badVisitorsCount = await Visitor.count({ input: "bad", Date: today });
const allVisitorsCount = await Visitor.count({});
//console.log(visitor.session);
res.render(`GoodOrBad/${req.body.input}`, {
goodVisitorsCount,
badVisitorsCount,
allVisitorsCount,
});
});
現在,當我作為尚未第一次輸入資料的用戶點擊 post 路由時。頁面無限加載,但中間件作業并防止任何用戶再次篡改表單。有任何解決這個問題的方法嗎?我對這個超級迷茫。這是我第一個使用 express、mongoose 和 node.js 的專案!
uj5u.com熱心網友回復:
如果visitors為空,則for回圈體永遠不會執行,因此您的中間件既不呼叫res.render也不呼叫next。但必須呼叫其中之一。
此外,如果for回圈體執行多次,則next可能會在第一次res.render執行和后續執行期間呼叫。或者next可能被多次呼叫。這一切都是沒有道理的。
無論回圈執行的頻率如何,您都必須確保next被呼叫一次或被res.render呼叫一次。
我不能更具體,因為我不清楚您如何知道當前的訪客是誰。該資訊必須req以某種方式來自請求物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312241.html
標籤:javascript 节点.js MongoDB 表达 猫鼬
