无法读取POST请求值:Express表单数据接收问题排查
解决表单提交值无法获取的问题
问题根源是表单里的提交按钮缺少name属性:HTML表单提交时,只有带name属性的控件才会把value以键值对形式发送到服务器,你的按钮只有value没有name,所以服务器端接收不到任何数据。
步骤1:修改FORM.ejs,给按钮添加name属性
给两个提交按钮加上相同的name属性(比如btn),这样提交时会把对应按钮的value发送到服务器:
<html lang="en" > <head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"></head> <body> <form method="POST" action="/"> <button type="submit" name="btn" value="myvalue1">POST 1</button> <button type="submit" name="btn" value="myvalue2">POST 2</button> </form> </body> </html>
步骤2:在APP.js中获取提交的值
现在可以通过req.body.btn拿到对应按钮的value值:
const express = require("express"); const S1_APP = express(); const ejs = require("ejs"); const bodyParser = require("body-parser"); S1_APP.use(bodyParser.urlencoded({ extended: false })); S1_APP.set('view engine', 'ejs');//template engine S1_APP.get("", function (req, res) { res.render('FORM.ejs'); }); S1_APP.post("/",function(req, res) { // 获取提交的按钮值 const submittedValue = req.body.btn; console.log(submittedValue); // 会输出myvalue1或myvalue2 res.send(`提交的值是:${submittedValue}`); }); S1_APP.listen(8080, function (err) { if (err) console.log(err); console.log("Server listening on PORT 8080"); });
另外,你的代码里const http = require('http');没有实际用到,可以删掉,不影响功能。
内容的提问来源于stack exchange,提问作者raymond van ophoven
相关产品推荐
相关产品推荐

