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


当前回答

 app.get('/category', function(req, res) {
  var string = query
  res.redirect('/?valid=' + string);
});

在ejs中,你可以直接使用valid:

<% var k = valid %>

其他回答

 app.get('/category', function(req, res) {
  var string = query
  res.redirect('/?valid=' + string);
});

在ejs中,你可以直接使用valid:

<% var k = valid %>

使用app.set & app.get

设置数据

router.get(
  "/facebook/callback",
  passport.authenticate("facebook"),
  (req, res) => {
    req.app.set('user', res.req.user)
    return res.redirect("/sign");
  }
);

获取数据

router.get("/sign", (req, res) => {
  console.log('sign', req.app.get('user'))
});

我们可以使用express-session发送所需的数据

当你初始化应用程序

const express = require('express');
const app = express();
const session = require('express-session');
app.use(session({secret: 'mySecret', resave: false, saveUninitialized: false}));

所以在重定向之前,只需要为会话保存上下文

app.post('/category', function(req, res) {
    // add your context here 
req.session.context ='your context here' ;
    res.redirect('/');
});

现在您可以在会话的任何地方获取上下文。它可以通过request。session。context获得

app.get('/', function(req, res) {

    // So prepare the context
var context=req.session.context;
    res.render('home.jade', context);
});

我用了一个非常简单但有效的技巧 在我的app.js(我的入口点) 我定义了一个变量

let authUser = {};

然后我分配给它从我的路由页面(像成功登录后)

authUser = matchedUser

这可能不是最好的方法,但它符合我的需求。

你可以通过查询字符串传递少量的键/值对数据:

res.redirect('/?error=denied');

主页上的javascript可以访问它并相应地调整它的行为。

注意,如果你不介意/category作为浏览器地址栏中的URL,你可以直接渲染而不是重定向。恕我直言,很多时候人们使用重定向,因为旧的web框架使直接响应变得困难,但表达起来很容易:

app.post('/category', function(req, res) {

  // Process the data received in req.body

  res.render('home.jade', {error: 'denied'});
});

@Dropped.on。Caprica评论说,使用AJAX消除了URL更改问题。