我使用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。
答案 0 :(得分:1)
你的代码似乎完全没问题。虽然问题在于您从POSTman客户端发送请求的方式。
当您使用使用表单数据发送请求时,POSTman会将此请求发送为 multipart / form-data ,它实际上会按以下格式发送您的数据:< / p>
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 中间件。但是对于您的情况,您只需发送数据而不使用使用表单数据(取消选中使用表单数据复选框),并将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屏幕捕获如下:
原始请求和响应的POSTman屏幕截图如下:
希望这会对你有所帮助。
答案 1 :(得分:0)