有几种方法可以将数据传递到不同的路由。最正确的答案当然是查询字符串。您需要确保这些值正确编码URI组件 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent and 解码URI组件 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent.
app.get('/category', function(req, res) {
var string = encodeURIComponent('something that would break');
res.redirect('/?valid=' + string);
});
您可以通过使用发送的参数来在其他路由中捕获它req.query
.
app.get('/', function(req, res) {
var passedVariable = req.query.valid;
// Do something with variable
});
对于更动态的方式,您可以使用url https://nodejs.org/api/url.html核心模块为您生成查询字符串:
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 https://nodejs.org/api/querystring.html核心模块
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);
});
另一种方法是在会话中设置一些内容。您可以在此处阅读如何设置 http://blog.modulus.io/nodejs-and-express-sessions,但是设置和访问变量是这样的:
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 中执行此操作将需要您使用另一个库。本质上,它允许您设置变量,这些变量将在您下次访问页面时显示并重置。它可以很方便地向用户显示错误,但它又被默认删除了。编辑:找到了一个添加此功能的库。 https://github.com/jaredhanson/connect-flash
希望这能让您大致了解如何在 Express 应用程序中传递信息。