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

恩里克·莫雷诺(Enrique Moreno)帐篷

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

阿尔伯特·恩格尔

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Django 重定向中传递 ID 和上下文

如何在Django QuerySet的每个条目中添加一些上下文

如何在 SpringExtension 的所有测试之前/之后使用上下文执行一些代码?

Orion上下文代理更新一些属性

如何使用Django重定向功能传递上下文数据?

如何为用户/连接设置一些上下文变量

如何从json数组的长度和上下文中获取一些数据

使用LSTM有状态传递上下文黑白批处理;可能是上下文传递中的一些错误,没有得到很好的结果?

Spring 安全在注销时重定向到另一个上下文

如何在远程 shell 的上下文中对 pdb 进行 stdin/stdout 重定向?

如何在相同上下文中重定向到url

如何使用重定向连接上下文

选择一些文本后,如何添加一个名为“在资源管理器中打开”的项目以右键单击上下文菜单?

如何在botium-cli中传递上下文或为上下文生成测试用例

如何通过传递一些数据重定向到其他组件

如何使用zgrep找出行号或提供一些上下文信息。围绕.gz文件

与样式对象传递上下文时,上下文如何工作?

如何在测试React组件时传递FlowRouter上下文

如何避免AlertContext在传递上下文时崩溃

如何在flutter中传递上下文或静态类中的任何参数?

传递成员时在JavaScript中丢失“此”上下文

如何在 React 的上下文中传递函数?

expressJS/mongoDB:如何在启动时添加一些夹具 mongoDB 数据?

如何重定向头文件(到库)以在实例化中包含一些代码?

一些豆在应用程序上下文的依赖关系形成循环

为什么在定义了一些从对象到变量上下文的方法后丢失了?

上下文菜单仅显示了一些TableView行javafx fxml

检查上下文是否有一些表然后添加到这个表

如何在基于类的视图的上下文中传递给Django中的模板?