我有这个代码js:
app.use(express.static(__dirname));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // support json encoded bodies
app.get('/', function(req, res){
res.sendFile(__dirname+'index.html')
});
app.get('/ins.html', function(req, res){
res.sendFile(__dirname+'ins.html')
});
app.post('/ins', function(req, res){
console.log(req.body)
res.redirect('/')
});
这段代码html:
<form method="post" enctype="multipart/form-data" action="/ins"><p> <strong>INSERISCI LA TUA CAGATA<br></strong>
<br><p>Username </p> <input type="text" name="username" required><br>
<br><p>Password  </p> <input type="password" name="password" required><br><br><br>
<input type="submit" class="mainBtn" id="submit" value="Inserisci Cagata">
<p>
</form></h2>
当我进入页面时,在che console show&#34; {}&#34;我没有访问POST变量。 我该如何解决这个问题?
答案 0 :(得分:3)
您使用的编码与您的身体解析器支持的编码不同。
您在表单中使用多部分编码(multipart/form-data
),但您的服务器需要JSON(application/json
)或URL编码数据(application/x-www-form-urlencoded
)。
除非您需要上传文件(需要多部分编码),否则您应该使用URL编码(如果未指定enctype
,则为defualt)。然后使用bodyParser.urlencoded()
解析器正确解析正文:
<form method="post" enctype="application/x-www-form-urlencoded" action="/ins">
<!-- ^--- note the enctype -->
<p>
<strong>INSERISCI LA TUA CAGATA<br></strong>
<br>
<p>Username </p>
<input type="text" name="username" required>
<br>
<br>
<p>Password  </p>
<input type="password" name="password" required>
<br>
<br>
<br>
<input type="submit" class="mainBtn" id="submit" value="Inserisci Cagata">
</p>
</form>
如果您 需要多部分编码(例如,如果您正在上传文件),则可以使用多部分正文解析器(例如multiparty或busboy)。请注意,因为multipart是一个复杂的编码,你不会直接获得req.body
,但你必须自己做一些解析,这就是为什么你应该避免多部分编码,除非你真的需要它。