【问题标题】:TypeError: Cannot read property 'username' of undefined--类型错误:无法读取未定义的属性“用户名”--
【发布时间】:2021-02-21 14:40:37
【问题描述】:
var express = require("express");
var app = express();
var morgan = require("morgan");
var mongoose = require("mongoose");
port = 8000;
var User = require("./app/models/user");
mongoose.connect("mongodb://localhost:27017/tutorial", function (err) {
if (err) {
console.log("Disconnected: " + err);
} else {
console.log("connected");
}
});
app.post("/users", function (req, res) {
var user = new User();
user.username = req.body.username;
user.email = req.body.email;
user.password = req.body.password;
user.save();
res.send("user created");
});
app.use(morgan("dev"));
app.listen(port, function () {
console.log("You are listen on port " + port);
});
TypeError:无法读取未定义的属性“用户名”
在 D:\MEAN\server.js:16:28
在 Layer.handle [as handle_request] (D:\MEAN\node_modules\express\lib\router\layer.js:95:5)
在下一个 (D:\MEAN\node_modules\express\lib\router\route.js:137:13)
在 Route.dispatch (D:\MEAN\node_modules\express\lib\router\route.js:112:3)
在 Layer.handle [as handle_request] (D:\MEAN\node_modules\express\lib\router\layer.js:95:5)
在 D:\MEAN\node_modules\express\lib\router\index.js:281:22
在 Function.process_params (D:\MEAN\node_modules\express\lib\router\index.js:335:12)
在下一个 (D:\MEAN\node_modules\express\lib\router\index.js:275:10)
在 expressInit (D:\MEAN\node_modules\express\lib\middleware\init.js:40:5)
在 Layer.handle [as handle_request] (D:\MEAN\node_modules\express\lib\router\layer.js:95:5)
在 trim_prefix (D:\MEAN\node_modules\express\lib\router\index.js:317:13)
在 D:\MEAN\node_modules\express\lib\router\index.js:284:7
在 Function.process_params (D:\MEAN\node_modules\express\lib\router\index.js:335:12)
在下一个 (D:\MEAN\node_modules\express\lib\router\index.js:275:10)
在查询 (D:\MEAN\node_modules\express\lib\middleware\query.js:45:5)
在 Layer.handle [as handle_request] (D:\MEAN\node_modules\express\lib\router\layer.js:95:5)
【问题讨论】:
标签:
javascript
mongodb
express
mongoose
【解决方案1】:
如果您的 post 请求像我认为的那样以 json 格式出现,您将需要以某种方式解析请求的正文。您可以通过要求“body-parser”并使用它的 json 方法来做到这一点,如下所示:
const bodyParser = require('body-parser');
const app = require('express')();
app.use(bodyParser.json());
我们所说的app.use(bodyParser.json()) 是对每条路由使用该正文解析器。
【解决方案2】:
包含一个使用 express 方法获取请求正文的代码 express.json,该方法在后台使用正文解析器模块
例如
这应该可行
app.use(express.json())