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

2024-04-19

我正在使用express 在node.js 中制作一个网络应用程序。这是我所拥有的内容的简化:

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不验证,我想传递一些额外的上下文/页。我怎么能这样做呢?重定向似乎不允许任何类型的额外参数。


有几种方法可以将数据传递到不同的路由。最正确的答案当然是查询字符串。您需要确保这些值正确编码URI组件 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent and 解码URI组件 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/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 https://nodejs.org/api/url.html核心模块为您生成查询字符串:

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 https://nodejs.org/api/querystring.html核心模块

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

另一种方法是在会话中设置一些内容。您可以在此处阅读如何设置 http://blog.modulus.io/nodejs-and-express-sessions,但是设置和访问变量是这样的:

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 中执行此操作将需要您使用另一个库。本质上,它允许您设置变量,这些变量将在您下次访问页面时显示并重置。它可以很方便地向用户显示错误,但它又被默认删除了。编辑:找到了一个添加此功能的库。 https://github.com/jaredhanson/connect-flash

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用 ts-node 时,Typescript 的声明合并无法按预期工作

    对于使用的项目express session包 我正在尝试改变session只需添加用户密钥即可实现对象 req session user 123 来自 哪里这个问题的 https stackoverflow com q 65108033
  • Socket IO聊天例子很慢

    我是 Node js 和 Socket IO 的新手 我想尝试一下解释的示例 https socket io get started chat https socket io get started chat 我做了我必须做的一切 它起作用
  • 是否有任何 mongodb ORM 允许您为字段添加别名?

    我刚刚看了这个 http blog mongodb org post 38467892360 mongodb schema design insights and tradeoffs from http blog mongodb org p
  • 如何使用 Node JS 对包含小数/尾随零的数据生成哈希

    在尝试验证 Node JS 中的 Authorize net webhook 通知时 我遇到了以下与小数 尾随零有关的问题 Authorize net 使用 HMAC SHA512 以及 Webhook 通知正文和商家的签名密钥形成哈希 该
  • grunt jasmine-node 测试运行两次

    我设置 grunt 来运行 node js 茉莉花测试 由于某种原因 使用此配置 结果总是显示双倍的测试 这是我的配置 我在用着茉莉花节点 https github com jasmine contrib grunt jasmine nod
  • 无法使用 Node npm 安装任何包

    我正在尝试通过 npm 安装一些节点包 但它不会安装 我已经尝试安装 卸载 更新节点 但似乎没有任何效果 我正在使用 ubuntu 12 04 以下是我尝试安装软件包的方式 npm install underscore npm http G
  • Discord.js:无效的位字段标志或数字:GUILDS

    我正在第一次尝试制作 Discord 机器人 该代码非常基本 只是一个在启动时将自己的标签记录到控制台的机器人 const Discord require discord js const TOKEN REDACTED const clie
  • 调试 SSR node.js 服务器端 VSCode

    我在尝试调试 SSR React 应用程序 服务器端 时花费了太多时间 我们正在从头开始构建一个应用程序 这是一个非常大的项目 因此调试代码非常重要 服务器的 webpack 配置如下 const path require path con
  • 从 Google Chat POST 请求验证 JWT

    我有一个 NodeJS 机器人使用 HTTPs 端点连接到 Google Chat 我正在使用快递来接收请求 我需要验证所有请求是否都来自 Google 并且希望使用 Google 随请求发送的不记名令牌来执行此操作 我的问题是我正在努力寻
  • 当第一个套接字连接时加载两个图像而不是一个 - Node.js

    我正在尝试在我的游戏中实现多人游戏功能 我在用着node js为了这 当一个人连接时 应该将一张图像加载到浏览器中 相反 它加载两个图像 这是我班级的一部分 var count 0 Keep track of which player we
  • Node + Express + Nginx 未设置 Cookie

    我有一个使用 Express 的 Node 应用程序 我尝试为我的客户端设置 cookie 它在本地环境 http 上运行良好 但是一旦我投入生产 https 我就很好地收到了cookie 我可以在响应中看到它 但它没有设置 任何想法 Ng
  • AzureAD JWT 令牌受众声明前缀使 JWT 令牌无效

    我正在使用 adal node npm 包通过 AzureAD 进行身份验证 一切正常 我得到了一个令牌 但是 在检查 JWT 令牌中的 aud 声明时 我看到受众 GUID 的前缀为 spn 我认为当我尝试在现有的 Web API 上使用
  • Momentjs 时区 - 获取特定时区时间的日期

    我正在尝试根据用户特定时区的 UTC 基准 创建日期 在本例中使用 momentjs momentjs 时区的 美国 洛杉矶 但是 我没有得到我期望的结果 var tempDate moment 1448841600000 moment 2
  • 使用node和multer将图像上传到heroku不起作用

    我正在尝试使用 Node 后端将图像文件上传到 Heroku 我可以使其工作 同样的过程在本地主机测试中工作得很好 但是在将我的项目部署到 Heroku 并测试它之后 过程和文件中出现错误不会上传 后端 let storage multer
  • Angular 2 http post + Nodejs Express

    我无法在服务器上获取帖子参数 我将 Angular 2 应用程序中的 post 请求发送到 Nodejs Express 服务器 这是我在 Angular 2 中的代码 import Injectable from angular2 cor
  • 如何定义与 Backbone 一起使用的 jade 模板

    我需要使用模板来渲染每个 ItemView var ItemView Backbone View extend className item template template itemTemplate html initialize fu
  • WebStorm已将目录中的所有文件标记为非项目文件

    WebStorm 已将我的项目子目录 根目录的服务器部分 中的所有文件标记为非项目文件 它发生在我转换到 Babel 然后又转换到 TypeScript 的过程中 我已经删除了 TypeScript 的内容 想知道这是否与该配置有关 我相信
  • 使用PM2时如何配置master进程

    我在 NodeJS 中遇到 PM2 问题 如果没有 PM2 我们总是有如下几行代码来配置主进程 if cluster isMaster master process configuration else worker process con
  • 使用 bitcoinjs-lib 发送比特币

    我正在关注 bitcoinjs 的教程https medium com orweinberger how to create a raw transaction using bitcoinjs lib 1347a502a3a wkf9g2l
  • 无法在heroku上推送node.js应用程序

    我尝试在heroku 上推送我的node js 应用程序 但是 无法检测到此应用程序的默认语言 我什至尝试过heroku buildpacks set heroku nodejs 但还是无法推动 Counting objects 31 do

随机推荐