当前位置: 首页 > 面试题库 >

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

常明亮
2023-03-14
问题内容

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



 类似资料:
  • 问题内容: 我知道有些东西像和一样强大。我想知道有没有机会上传没有文件的文件。 问题答案: 如果要上传文件,则需要能够解析多部分内容。您可以使用它来解析或实现自己的解析。以下列出了可以帮助您的模块: 直接解析(基于截至2016年11月的Github星,以递减的形式出现): 强大 男生 多党 中间件: multer-基于busboy,比下面的选项更受欢迎 busboy中间件 -上一次提交2014年4

  • 问题内容: 我正在nodejs / expressjs中构建购物车应用程序。在用户登录后重定向到正确的页面时,我遇到了一些问题。我发现有几篇文章密切相关,但是我从给定的文章中进行修复的所有尝试都没有成功。 发生的情况是,用户输入其登录信息,然后单击登录按钮。Ajax请求将数据发送到此访问功能。该功能首先检查用户是否存在于数据库中。如果是,那么它将继续比较bcrypt密码,如果它们相等,则它们成功登

  • 问题内容: 我有一个验证并保存表单的视图。保存表单后,我想重定向回list_object视图,并显示一条成功消息“客户xyz的表单已成功更新…” HttpResponseRedirect似乎无法正常工作,因为它只为url提供一个参数,无法与之一起传递字典。 我已经尝试修改object_list的包装,以将dict作为具有必要上下文的参数。我从保存表单的视图内部返回对此包装的调用。但是,呈现页面时,

  • 问题内容: 我有一个表单,可以在用户输入信息后重定向到同一页面(以便他们可以继续输入信息)。如果表单提交成功,我将返回 效果很好。但是,在这种情况下,我还想向用户显示一些消息(例如,屏幕顶部的“您的数据已保存”)。如果不进行重定向,我只会在上下文字典中返回这些消息。但是,有了重定向,我无法做到这一点。 那么在使用HttpResponseRedirect时如何传递模板上下文信息? 我正在尝试做的事情

  • 问题内容: 我正在尝试使用Struts2实现以下目标 这就是我在做什么: 为什么以上内容不能重定向为以下任何建议: 问题答案: 到目前为止,对我有用的解决方案是 在操作中定义味精的设置者和获取者的位置

  • 2FE552B7-53B1-4E4A-AFFF-3AEF8FE9D05B-----WebKitFormBoundaryLH8FJWGYEEVTCJMA内容-配置:表单-数据;name=“sample test file.pdf”;filename=“sample test file.pdf”content-type:application/pdf