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

如何解决Express无法获取textarea标签提交值的问题?

问题描述

我有一个供用户编辑内容的表单,包含两个input标签和一个textarea标签。原本期望Express能获取input与textarea的提交值,但实际仅能获取input的值,textarea的值为空。曾将textarea替换为input标签,此时能正常获取值,但input为单行文本标签,我需要多行文本标签来处理用户的长段落内容。

后端代码:

app.post("/editBlog", (req, res) => {
  // console.log(`Edit blog at index: ${editBlogIndex}`);
  const blogToEdit = posts[editBlogIndex];
  // console.log(blogToEdit);
  blogToEdit.fname = req.body["fullname"];
  blogToEdit.title = req.body["title"];
  blogToEdit.blogContent = req.body["content"];
  res.render("edit-blog.ejs", {
    posts: posts
  });
})

前端表单代码:

<form action="/editBlog" method="post">
  <div class="form-group">
    <label for="fullname">名前:</label>
    <input type="text" id="fullname" name="fullname" placeholder="フルネーム" value="<%= blogEdit.fname %>"><br>
  </div>
  <div class="form-group">
    <label for="title">タイトル:</label>
    <input type="text" id="title" name="title" placeholder="投稿タイトル" value="<%= blogEdit.title %>"><br>
  </div>
  <div class="form-group">
    <label for="content">内容:</label>
    <textarea id="content" name="content" placeholder="投稿内容" value="<%= blogEdit.blogContent %>" style="height:200px"></textarea>
  </div>
  <div class="d-grid gap-2 col-6 mx-auto">
    <button type="submit" class="btn btn-primary">Submit</button>
  </div>
</form>
解决方案

1. 修正textarea的内容渲染方式

textarea标签不支持value属性,设置初始内容需将内容放在<textarea>与</textarea>的闭合标签之间。同时为了正确渲染包含换行、特殊字符的内容,需使用EJS的<%- %>标签(而非<%= %>)输出原始内容,避免转义导致格式丢失。

修改后的textarea代码:

<div class="form-group">
  <label for="content">内容:</label>
  <textarea id="content" name="content" placeholder="投稿内容" style="height:200px"><%- blogEdit.blogContent %></textarea>
</div>

2. 确认Express的body解析中间件配置

虽然你能获取input的值说明中间件大概率已配置,但仍需确保在Express应用路由前添加urlencoded中间件,否则无法解析表单提交的application/x-www-form-urlencoded格式数据:

// 在路由注册前添加
app.use(express.urlencoded({ extended: true }));

3. 后端代码验证

你的后端逻辑本身无问题,提交后可通过req.body.content(或req.body["content"])获取textarea的值。若仍有问题,可在路由中打印req.body确认所有提交参数:

app.post("/editBlog", (req, res) => {
  console.log(req.body); // 打印所有提交参数,确认content是否存在
  const blogToEdit = posts[editBlogIndex];
  blogToEdit.fname = req.body.fullname;
  blogToEdit.title = req.body.title;
  blogToEdit.blogContent = req.body.content;
  res.render("edit-blog.ejs", { posts: posts });
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:22:18