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

如何将EJS中<%= name %>的值传回Node.js服务器?req.body.name获取失败

解决方案:无法将EJS渲染的name值传回Node.js服务器

核心问题分析

你遇到的问题本质是:EJS的<%= name %>只是把值渲染到页面HTML中,但如果没有将这个值放入可被表单/AJAX提交的字段里,Node.js服务器就无法通过req.body.name获取到它。span、普通button标签本身不会自动把内容/值提交给服务器。

具体解决方案

1. 用隐藏输入框(最稳妥的表单提交方式)

在表单内添加一个type="hidden"的input元素,把EJS渲染的name值绑定到它的value属性,同时给这个input设置和服务器端req.body.name匹配的name属性:

<!-- page.ejs 中的表单代码 -->
<form method="POST" action="/submit-form">
  <!-- 隐藏输入框存储要传递的name值 -->
  <input type="hidden" name="name" value="<%= name %>">
  
  <!-- 其他需要提交的表单元素 -->
  <input type="text" name="username" placeholder="用户名">
  
  <button type="submit">提交表单</button>
</form>

2. 确保服务器端正确解析请求体

确认你的Express服务器已经配置了请求体解析中间件,否则req.body会是undefined:

// app.js 中的配置代码
const express = require('express');
const app = express();

// 解析表单提交的x-www-form-urlencoded格式数据
app.use(express.urlencoded({ extended: true }));
// 解析JSON格式数据(若用AJAX提交则需要)
app.use(express.json());

// 处理POST请求的路由
app.post('/submit-form', (req, res) => {
  console.log(req.body.name); // 现在应该能正常输出值了
  console.log(req.body.username); // 其他字段保持正常
  // 后续业务逻辑
  res.send('提交成功');
});

3. 若使用AJAX异步提交

如果是通过JS异步提交数据,需要手动获取页面上的name值,然后放入请求体中:

<!-- page.ejs 中的元素 -->
<span id="name-span"><%= name %></span>
<button id="submit-btn">异步提交</button>

<script>
document.getElementById('submit-btn').addEventListener('click', async () => {
  // 从页面元素中获取name值
  const name = document.getElementById('name-span').textContent;
  
  // 发送POST请求到服务器
  const response = await fetch('/submit-form', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ name: name })
  });
  
  const result = await response.text();
  console.log(result);
});
</script>

4. 常见错误排查

  • 检查页面源代码:右键页面→查看源代码,确认<%= name %>已经被渲染成实际字符串(比如<input type="hidden" name="name" value="张三">),而非保留EJS语法。
  • 拼写检查:确保表单元素的name="name"和服务器端req.body.name的名称完全一致(大小写敏感,Name和name是不同字段)。
  • 若用button传递值:需设置button的type="submit"和name属性,比如<button type="submit" name="name" value="<%= name %>">提交</button>,但此方式会把name值显示在按钮上,仅适合短文本场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:30:58