You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何在res.redirect传递变量并在GET路由中获取

解决POST重定向时传递变量到GET路由的问题

嘿,我明白你的需求啦~你之前尝试在res.redirect()里用EJS模板语法<%= email %>是行不通的,因为res.redirect()的参数是直接作为URL字符串处理的,不会被模板引擎解析。下面给你两种靠谱的实现方法:

方法一:使用路由参数(你原本的思路)

首先要注意你代码里的路径拼写错误:POST里写的是/passingemail/<%= email %>,但GET路由定义的是/paddingemail/:email,两个路径的拼写(passing vs padding)不一致,这会导致路由匹配失败,得先把这个改过来。

然后在POST路由里,用字符串拼接或者ES6模板字符串来构造正确的重定向URL:

router.post("/message", function(req, res) {
  var email = req.body.email;
  // 用ES6模板字符串拼接路由参数,注意路径要和GET路由一致
  res.redirect(`/passingemail/${email}`);
});

// 修正路径拼写,和POST里的重定向路径匹配
router.get("/passingemail/:email", function (req, res){
  // 通过req.params获取路由参数里的email
  const receivedEmail = req.params.email;
  console.log("收到的邮箱:", receivedEmail);
  // 这里可以继续处理逻辑,比如渲染页面时传递变量
  res.render("your-page", { email: receivedEmail });
});

方法二:使用查询参数(Query String)

如果你不想把邮箱放在路由路径里,也可以用查询参数的方式传递:

router.post("/message", function(req, res) {
  var email = req.body.email;
  // 把邮箱作为查询参数拼在URL后面,用encodeURIComponent处理特殊字符
  res.redirect(`/passingemail?email=${encodeURIComponent(email)}`);
});

router.get("/passingemail", function (req, res){
  // 通过req.query获取查询参数里的email
  const receivedEmail = req.query.email;
  console.log("收到的邮箱:", receivedEmail);
  // 后续逻辑处理
});

小提醒

如果邮箱里包含特殊字符(比如@、%、&),一定要用encodeURIComponent()对变量进行编码,避免URL解析出错。两种方法都适用这个提醒哦~

内容的提问来源于stack exchange,提问作者wzwd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:28:04