UnhandledPromiseRejectionWarning:ValidationError

时间:2018-05-27 01:50:42

标签: javascript node.js express mongoose mongoose-schema

几天后我遇到了麻烦。我正在学习MEAN堆栈,但是在使用mongoose模式在mongo上创建用户时,我遇到了这个问题:

  

(node:93337)UnhandledPromiseRejectionWarning:ValidationError:用户验证失败:用户名:路径username是必需的。密码:路径password是必需的。,电子邮件:路径email是必需的

这是我的代码:

服务器部分:

mongoose.connect('mongodb://localhost:27017/Wisebatt', err => {
  if (err) {
    console.log(`Not connected to db ${err}`)
  } else {
    console.log('Successfully connected to db')
  }
})

...

app.post('/register', (req, res) => {
    const user = new User();
    user.username = req.body.username;
    user.password = req.body.password;
    user.email = req.body.email;
    user.save();
    res.send('User created');
});

UserSchema:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const UserSchema = new Schema({
    username: { type: String, required: true, unique: true},
    password: { type: String, required: true },
    email: { type: String, required: true, unique: true},
});

module.exports = mongoose.model('User', UserSchema);

以下是我正在使用的附加组件:

  • 快递,
  • Nodemon,
  • 摩根,
  • Body Parser,
  • Mongo(使用mongod run& Mongoose)

3 个答案:

答案 0 :(得分:1)

尝试在路线之前将其添加到您的快速代码中。这是一个中间件,它会在您向后端发送请求时设置req.body对象。 (你还需要npm install --save body-parser)

const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())

如果您使用的是休息客户端。确保您有一个请求标题,例如:

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

答案 1 :(得分:0)

好的,我发现了问题...

显然,问题是由于这两个中的一个:

  • 使用的浏览器
  • 发送POST请求的扩展程序

惊喜,我和Postman一起尝试过,请求成功了。所以所有代码都很棒,问题来自两个中的一个。

所以,这让我了解了一件事。如果它不是你的代码,那就是你正在使用的软件可以摧毁你所做的一切

答案 2 :(得分:0)

如果您使用的是expressJS,请确保必须添加此行。

const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

特别是这个

app.use(express.urlencoded({ extended: true }));

这实际上解决了我的问题。