node.js - Mongoose 错误 : document must have an _id before saving at new MongooseError

标签 node.js mongodb mongoose

<分区>

我有一个注册页面,需要输入用户名和密码才能存储到 mongoDB 中。 registration screen

当我点击“注册”按钮时,它加载了一个错误页面。 register error

这也会导致终端出现 Mongoose 错误,提示 MongooseError: document must have an _id before saving at new MongooseError

enter image description here

下面是代码。

//server.js file
var express = require('express');
var app = express();
var port = 8888;
var mongoose = require('mongoose');
var bodyParser = require('body-parser');

/*Body parser*/
app.use(bodyParser.urlencoded({
    extended: true
}));

/*Database connection - MongoDB*/

//Created from the command earlier. Ensure this is done on the first_db instance
var username = 'admin';
var password = '123456';

var dbHost = 'localhost';
var dbPort = '27017';
var database = 'first_db';

var url = 'mongodb://' + username + ':' + password + '@' + dbHost + ':' + dbPort + '/' + database;
console.log('mongodb connection = ' + url);

mongoose.connect(url, function(err) {
    if(err) {
        console.log('connection error: ', err);
    } else {
        console.log('connection successful');
    }
});


/***********
Declare all models here
***********/

//User model
var UserSchema = new mongoose.Schema({
     _id: mongoose.Schema.ObjectId,
     username: String,
     password: String
 });

var User = mongoose.model('user', UserSchema);


/***********
All routes go below
***********/



app.get('/', function (req, res, next){
	res.sendFile( __dirname + '/index.html');
});

app.get('/register', function (req, res, next) {
    res.sendFile( __dirname + '/register.html');
});

app.post('/register', function (req, res, next) {
    User.create(req.body, function(err, saved) {
    if(err) {
        console.log(err);
        res.json({ message : err });
    } else {
        res.json({ message : "User successfully registered!"});
    }
	});
});

app.listen(port, '0.0.0.0', function(){
	console.log('Server running at port ' + port);
});

//register.html file
<html>
    <head>
        <title>My first NodeJS Website</title>
    </head>
    <body>
        <p>Registration page</p>

        <form action="/register" method="post">
            <p>Username <input type="text" name="username" /></p>
            <p>Password <input type="password" name="password" /></p>
            <input type="submit" value="Register"/>
        </form>

        <p><a href="/">Click here to go back.</a> </p>
    </body>
</html>

//index.html file
<html>
    <head>
        <title>My first NodeJS Website</title>
    </head>
    <body>
        <p>Hello World!</p>

        <form action="/login" method="post">
            <p>Username <input type="text" name="username" /></p>
            <p>Password <input type="password" name="password" /></p>
            <input type="submit" value="Login"/>
        </form>

        <p>Not yet registered? <a href="/register">Click here to create an account.</a> </p>
    </body>
</html>

最佳答案

您不必在 User 模式中将 _id 定义为 mongoose.Schema.ObjectId。 MongoDB 将隐式生成 ID,即使您没有在模式中定义它,也将插入您的对象,即使您没有为 _id 提供值。但是,如果您在架构中明确定义它,Mongoose 会运行验证检查并期望您提供该值 - 它会抛出一个错误并且您的查询甚至不会到达数据库。

关于node.js - Mongoose 错误 : document must have an _id before saving at new MongooseError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839042/

相关文章:

javascript - 如何使用 Mongoose 中的聚合查询过滤 $match 等于对象值

node.js - 在 webpack 中使用样式表的最佳方式是什么?

javascript - 使用 Node.js 和 Express 发布时如何访问请求正文?

java - Mongodb中如何限制字段

mongodb - 查找包含点的 Mongodb 地理空间圆

node.js - 如何修复 mongodb 查询?

mongodb - Upsert Document和/或添加子文档

node.js - 使用 node-oauth2-server 和 MongoDB 示例将示例数据加载到数据库中

javascript - Angular2 和 SystemJS : Cannot find module while building a moduleLoader

python - 在 Flask 中实现 MongoDB 搜索引擎 API