【问题标题】:NodeJS - POST - Cannot read property 'x' of undefinedNodeJS - POST - 无法读取未定义的属性“x”
【发布时间】:2019-06-15 17:48:41
【问题描述】:

在昨天的整个下午和今天早上的几个小时之后,我一直遇到这个问题。

我更新了所有需要的包。 我使用 PostMan 发送 POST,使用 header Content-Type:application/jsonbody (Key=id) and (Value=32)(请查看下面的屏幕截图) .

使用的代码:

const express = require('express');
const bodyParser = require('body-parser');
const router = express.Router();
var app = express();
app.use(router);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));
var hostname = 'localhost';
var port = 3000;

app.listen(port, hostname, function(err) {
    if (!err) {
        console.log("Server OK at http://" + hostname + ":" + port);
    }
});
router.post('/test', (req, res) => {
    console.log('' + req.body.id);
});

我在 PostMap 上试过这个:

POST send from PostMan ; Second try from PostMan

我使用 Key=id Value=32 还有“id”和32 来自表单数据和其他三个(x-www-form-urlencoded,raw,...)

错误:

TypeError: 无法读取未定义的属性“id” 在 router.post (C:\SVDJS\test\simpleTest.js:19:30) 在 Layer.handle [as handle_request] (C:\SVDJS\node_modules\express\lib\router\layer.js:95:5) 在下一个 (C:\SVDJS\node_modules\express\lib\router\route.js:137:13) 在 Route.dispatch (C:\SVDJS\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (C:\SVDJS\node_modules\express\lib\router\layer.js:95:5) 在 C:\SVDJS\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (C:\SVDJS\node_modules\express\lib\router\index.js:335:12) 在下一个 (C:\SVDJS\node_modules\express\lib\router\index.js:275:10) 在 Function.handle (C:\SVDJS\node_modules\express\lib\router\index.js:174:3) 在路由器 (C:\SVDJS\node_modules\express\lib\router\index.js:47:12)

我已经阅读了互联网上关于这个问题的大部分帖子,如果没有正当理由,请不要重定向。

如果有人可以帮助我,那就太好了。谢谢。

【问题讨论】:

  • 我只想打个招呼,因为帖子似乎自动删除了它。
  • req.body 未定义。尝试打印req
  • 您好,感谢您的回复。它显示 [object Object] :imgur.com/XU6nV8R 我也试过 console.log('' + JSON.stringify(req.body));但它显示未定义。
  • console.log(JSON.stringify(req)) 呢?

标签: node.js


【解决方案1】:

首先,由于您使用app.use(bodyParser.json());,您应该像在第二个屏幕截图中那样通过邮递员发送 json。 http://joxi.ru/1A5oo90iKloLVm

第二件事是你在中间件之前使用你的路由

你做到了:

app.use(router);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

所以正文还没有解析

它应该是:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(router);

一致性在nodejs中很重要

【讨论】:

  • 感谢您的回复。确实,从 PostMan 发送的 POST 有一个错误,使用的是 Raw 结构。事实上,第二件事是那里最深层次的问题。解决。再次感谢。
【解决方案2】:

req.body(在console.log('' + req.body.id); 行中)是undefined。您收到的请求可能根本不包含任何正文。或者无法根据其 Content-Type 解析给定的正文。

根据您的屏幕截图,您没有发送有效的 JSON。 PostMan 的form-data 不发送 JSON。如果要发送 JSON,请选择 raw 并写入 JSON:{"id":32}

【讨论】:

  • 感谢您的回复。我编辑了帖子,添加了与我的 PostMan 发送的相关截图。事实上,当我说“id:32”时,它只是键和值,因为我没有直接写 id:32,而是用 id 完成了字段 Key,用 32 完成了字段 Value。
  • 谢谢,我认为这个是好的^^ 它显示同样的错误。 imgur.com/Lq6WncU(这不是 "id" = 32 而是 "id":32 但同样的错误)
猜你喜欢
  • 2017-03-06
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2022-09-22
  • 2022-09-23
  • 2022-11-29
相关资源
最近更新 更多