请求发布后请求体= {}

时间:2017-03-16 18:35:53

标签: javascript html node.js express post

我有这个代码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&nbsp</p> <input type="text" name="username" required><br>
                            <br><p>Password &nbsp</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变量。 我该如何解决这个问题?

1 个答案:

答案 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&nbsp</p>
    <input type="text" name="username" required>
    <br>
    <br>
    <p>Password &nbsp</p>
    <input type="password" name="password" required>
    <br>
    <br>
    <br>
    <input type="submit" class="mainBtn" id="submit" value="Inserisci Cagata">
  </p>
</form>

如果您 需要多部分编码(例如,如果您正在上传文件),则可以使用多部分正文解析器(例如multipartybusboy)。请注意,因为multipart是一个复杂的编码,你不会直接获得req.body,但你必须自己做一些解析,这就是为什么你应该避免多部分编码,除非你真的需要它。