【问题标题】:nodejs- unable to fetch form datanodejs-无法获取表单数据
【发布时间】:2017-07-12 21:23:22
【问题描述】:

我正在使用 Express JS (v 4.15.3) 构建节点 api。

我正在尝试获取从表单发送的值(通过 POSTman 客户端)。我无法获取它。

这是我的表格

指定标题

没有标题

这就是我试图获取它的方式:

router.post('/login',function(req, res, next) {
    var email= req.body.email;
    //var email= req.query.email; //also tried this
    res.json({
      value: email
    });
});

我没有收到错误。

注意:我已经包含了正文解析器。

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

谁能告诉我为什么我没有得到价值?谢谢! 这是我第一次尝试学习 Node JS。

【问题讨论】:

  • 你试过application/json作为Content-Type吗?

标签: node.js express


【解决方案1】:

您的代码似乎完全没问题。虽然问题在于您从 POSTman 客户端发送请求的方式。

当您使用使用表单数据发送请求时,POSTman将此请求发送为multipart/form-data,它实际上以如下格式发送您的数据:

POST /api/login HTTP/1.1
Host: localhost:3000
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="email"

example@example.com
----WebKitFormBoundaryE19zNvXGzXaLvS5C

对于 multipart/form-data 请求,如果您确实需要使用应用程序上传文件,则需要使用 multer 中间件。但是对于您的情况,您可以在不使用 use form data 的情况下发送数据(取消选中 use form data 复选框),并将 content-type 标头设置为:

Content-Type: application/x-www-form-urlencoded

因此,在所有这些修改之后,您的 原始网络请求 应该如下所示:

POST /api/login HTTP/1.1
Host: localhost:3000
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

email=example@example.com

用于构建请求和响应的 POSTman 屏幕截图如下:

Raw 请求和响应的 POSTman 屏幕截图如下:

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    尝试将 Content-Type 设置为 application/json 并在正文中以 json 格式原始写入,如下所示:

    {
        "email":"example@gmail.com"
    }
    

    这里是你可以参考的图片。

    如果你觉得有帮助,别忘了给答案点赞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-09
      • 2014-04-08
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      相关资源
      最近更新 更多