我正在使用 express 在 node.js 中制作一个 Web 应用程序。这是我所拥有的简化:
var express = require('express'); var jade = require('jade'); var http = require("http"); var app = express(); var server = http.createServer(app); app.get('/', function(req, res) { // Prepare the context res.render('home.jade', context); }); app.post('/category', function(req, res) { // Process the data received in req.body res.redirect('/'); });
我的问题如下:
如果我发现发送的数据/category没有验证,我想将一些额外的上下文传递给/页面。我怎么能这样做?重定向似乎不允许任何类型的额外参数。
/category
/
有几种方法可以将数据传递到不同的路由。最正确的答案当然是查询字符串。您需要确保值正确encodeURIComponent和decodeURIComponent。
app.get('/category', function(req, res) { var string = encodeURIComponent('something that would break'); res.redirect('/?valid=' + string); });
您可以通过使用req.query.
req.query
app.get('/', function(req, res) { var passedVariable = req.query.valid; // Do something with variable });
对于更动态的方式,您可以使用url核心模块为您生成查询字符串:
url
const url = require('url'); app.get('/category', function(req, res) { res.redirect(url.format({ pathname:"/", query: { "a": 1, "b": 2, "valid":"your string here" } })); });
所以如果你想重定向所有 req 查询字符串变量,你可以简单地做
res.redirect(url.format({ pathname:"/", query:req.query, }); });
如果你使用 Node >= 7.x 你也可以使用querystring核心模块
querystring
const querystring = require('querystring'); app.get('/category', function(req, res) { const query = querystring.stringify({ "a": 1, "b": 2, "valid":"your string here" }); res.redirect('/?' + query); });
另一种方法是在会话中设置一些东西。 您可以在此处阅读如何设置它,但设置和访问变量是这样的:
app.get('/category', function(req, res) { req.session.valid = true; res.redirect('/'); });
后来在重定向之后......
app.get('/', function(req, res) { var passedVariable = req.session.valid; req.session.valid = null; // resets session variable // Do something });
还可以选择使用 Express 的旧功能,req.flash. 在较新版本的 Express 中这样做需要您使用另一个库。本质上,它允许您设置将在您下次访问页面时显示和重置的变量。它可以方便地向用户显示错误,但默认情况下它已被删除。编辑:找到一个添加此功能的库。
req.flash
希望这能让您大致了解如何在 Express 应用程序中传递信息。