簡體   English   中英

通過 Express/Node.js 中的重定向將錯誤消息傳遞給模板

[英]Passing error message to template through redirect in Express/Node.js

在我的 Node.js 應用程序中,我有一個 function(由 Express 路由),它向用戶顯示了一個表單:

app.get('/register', function (req, res) {
  res.render('form');
});

我還有另一個 function,路由到同一個 URL,但它處理 POST 請求,它接收前一個表單提交的數據。 如果表單未通過驗證,它將用戶重定向回表單; 否則,它會做應該做的事情:

app.post('/register', function (req, res) {
  if (validate(req.registerForm)) return res.redirect('back');
  persistStuff(req.registerForm, function (err, data) {
    // Do error verification etc.
    res.redirect('back')
  });
});

我想要做的是在以下行中發送一條要顯示的錯誤消息:

if (validate(req.registerForm)) return res.redirect('back');

寫類似的東西

if (validate(req.registerForm)) return res.render('form', {msg:'invalid'});

是不可接受的,因為我想遵循 POST-REDIRECT-GET 模式。 我可以做類似的事情

if (validate(req.registerForm)) return res.redirect('/register?msg=invalid');

但它會在我的代碼中硬編碼一個 URL ,我寧願避免它。 還有另一種方法嗎?

您需要使用flash 通知,它內置在 express 中。

您將添加如下消息: req.flash("error", "Invalid form...");

您需要一個動態處理程序來將消息添加到您呈現的模板中,或者您可以查看 TJ 為 express 制作的消息。 快訊

您可以簡單地將其重定向為res.redirect('..?error=1')

這? 標簽告訴瀏覽器它是一組可選參數,而.. 只是一個路徑名相對調用(如在終端上調用 cd.. 以移回一個目錄),您的瀏覽器將使用該標簽定向到相應的頁面最后: http://.....?error=1

然后您可以通過執行以下操作簡單地在相應頁面上拉出錯誤:

if (req.param("error" == 1)) { // do stuff bassed off that error match };

您可以硬編碼幾個不同的錯誤值,並根據發生的錯誤做出適當的響應

暫無
暫無

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

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