我正在使用 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 中发送的数据没有验证,我想将一些额外的上下文传递给 / 页面。我怎么能这样做?重定向似乎不允许任何类型的额外参数。

最佳答案

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

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,
     });
 });

如果你使用 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);
 });

另一种方法是在 session 中设置一些东西。 You can read how to set it up here ,但设置和访问变量是这样的:
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 中这样做将需要您使用另一个库。本质上,它允许您设置变量,这些变量将在您下次访问页面时显示和重置。向用户显示错误很方便,但默认情况下它已被删除。编辑:Found a library that adds this functionality.

希望这能让您大致了解如何在 Express 应用程序中传递信息。

关于node.js - 如何在传递一些上下文时在 expressjs 中重定向?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19035373/

10-16 06:09