如何解决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
相关产品推荐
相关产品推荐

