有几种方法可以将数据传递到不同的路由。当然,最正确的答案是查询字符串。您需要确保这些值是正确的encodeURIComponent和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核心模块为你生成查询字符串:
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,
});
});
如果你使用的是节点>= 7。X你也可以使用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中这样做将需要使用另一个库。从本质上讲,它允许您设置变量,这些变量将在下次进入页面时显示并重置。它便于向用户显示错误,但默认情况下它已被删除。编辑:找到了添加此功能的库。
希望这能让您大致了解如何在Express应用程序中传递信息。