我想發送一個訊息變數,說明在不使用護照或會話的情況下成功或失敗。
當它失敗時,我可以這樣做:
res.status(401).render('register', {
message: 'Your username/email or password is incorrect.'
})
所以我認為這是可能的:
res.redirect('/');
res.render('', { message: 'Login success.'});
但事實證明并非如此:
Error: Cannot set headers after they are sent to the client
有沒有簡單的解決方案?
我嘗試制作一個 router.get('/message/redirect :route') 但我意識到我在那里也遇到了同樣的問題。
uj5u.com熱心網友回復:
您在渲染之前重定向。所以渲染方法不能發送標頭,因為你已經重定向了它們。您需要呼叫重定向或渲染,而不是同時呼叫。你可以這樣做。
res.render('/', { message: 'Login success.'});
洗掉這一行
res.redirect('/');
在您的 EJS 檔案中,只需呼叫<%= message %>即可訪問訊息。有一種更好的方法來處理確認/錯誤訊息。使用閃存。
npm install express-flash
然后在渲染之前,呼叫flash。Flash 接受兩個引數,訊息名稱和訊息本身,像這樣
req.flash("MessageName", "Login success");
res.redirect(pathName);
確保使用閃光燈
const flash = require('express-flash');
app = express();
app.use(flash());
app.use((req, res, next) => {
res.locals.MessageName= req.flash("MessageName");
next();
});
要訪問 EJS 檔案中的訊息,只需呼叫 <%= MessageName %>
這是我的代碼示例:在服務器檔案中:
req.flash("error", "Something went wrong");
res.redirect('back');
在 EJS 檔案中:
<div class="flash">
<% if(error && error.length > 0){ %>
<div class="flash_error">
<h1 class="flash_error--text"><%= error %></h1>
</div>
<% } %>
</div>
閱讀本文了解更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316625.html
