Node.js:提交表单时接收空体

时间:2015-07-14 01:55:11

标签: javascript node.js post curl express

我知道这里有很多类似的问题,但我仍然无法解决我的问题。我真的不知道发生了什么事。 我试图通过post请求从表单发送数据,但继续接收空体。 表单的Jade代码如下所示:(编辑:已添加enctype

    form(enctype="application/json" action="/test" method="post" name="login")
        table
            tr
                th
                    label(for="username") Username
                td
                    input(type="text" name="username" placeholder="username")
            tr
                th
                    label(for="password") Password
                td
                    input(type="password" name="password" placeholder="password")
            tr
            tr
                th
                td
                    input(type="submit" value="Login")

生成以下HTML代码(修改:添加HTML代码):

<form enctype="application/json" action="/test" method="post" name="login">
  <table>
    <tr>
      <th>
        <label for="username">Username</label>
      </th>
      <td>
        <input type="text" name="username" placeholder="username">
      </td>
    </tr>
    <tr>
      <th>
        <label for="password">Password</label>
      </th>
      <td>
        <input type="password" name="password" placeholder="password">
      </td>
    </tr>
    <tr></tr>
    <tr>
      <th></th>
      <td>
        <input type="submit" value="Login">
      </td>
    </tr>
  </table>
</form>

所以我没有忘记name属性。

这就是我处理请求的方式:

router.post('/test', function(req, res) {
    console.log('body:', req.body);
    res.render('login', {title: 'HK Test'});
});

打印body {}。所以我确信收到了请求。

我也在使用bodyparser:

var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());`

但是,当我使用curl:curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:4000/login时,正文包含用户名和对象。我从另一个工作项目中复制了Jade代码,所以我真的不明白我做错了什么。

有没有人知道这可能是什么原因?

2 个答案:

答案 0 :(得分:1)

要在提交时将表单数据序列化为JSON,您必须将此属性添加到表单中:

enctype="application/json"

否则,在没有JS的任何帮助的情况下,您的表单数据将不会被封装为POST请求的JSON。

进一步阅读:

  

W3C JSON form submission

答案 1 :(得分:-1)

请求不是curl请求中的/ test

http://localhost:4000/login

将其更改为

http://localhost:4000/test

你忘记了逗号

    form(action="/test", method="post", name="login")