在传递一些上下文时如何在expressjs中重定向?

我正在使用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无效,我想向/页面传递一些其他上下文。我该怎么办?重定向似乎不允许任何额外的参数。

回答:

有几种方法可以将数据传递到不同的路由。当然,最正确的答案是查询字符串。您需要确保值正确地是encodeURIComponent和encodeURIComponent。

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"

}

}));

});

因此,如果您想重定向所有请求查询字符串变量,则只需执行

res.redirect(url.format({

pathname:"/",

query:req.query,

});

});

如果您使用Node> =

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应用程序中传递信息有一个大致的了解。

以上是 在传递一些上下文时如何在expressjs中重定向? 的全部内容, 来源链接: utcz.com/qa/406031.html

回到顶部