如何修复"User validation failed: password: Path `password` is required., email: Path `email` is required



我是一个开始学习node.js的初学者。在学习的过程中,我遇到了一个类似的通知问题

{
"errors": {
"password": {
"name": "ValidatorError",
"message": "Path `password` is required.",
"properties": {
"message": "Path `password` is required.",
"type": "required",
"path": "password"
},
"kind": "required",
"path": "password"
},
"email": {
"name": "ValidatorError",
"message": "Path `email` is required.",
"properties": {
"message": "Path `email` is required.",
"type": "required",
"path": "email"
},
"kind": "required",
"path": "email"
},
"name": {
"name": "ValidatorError",
"message": "Path `name` is required.",
"properties": {
"message": "Path `name` is required.",
"type": "required",
"path": "name"
},
"kind": "required",
"path": "name"
}
},
"_message": "User validation failed",
"message": "User validation failed: password: Path `password` is required., email: Path `email` is required., name: Path `name` is required."}

这是我的用户模型

const mongoose = require('mongoose')
const validator = require('validator')
const User = mongoose.model('User', {
name: {
type: String,
required: true,
trim: true
}, 
email: {
type: String, 
required: true,
trim: true,
lowercase: true,
validate(value) {
if (!validator.isEmail(value)) {
throw new Error('Email is invalid')
}
}
},
password:{
type: String,
required: true, 
minlength: 7,
trim: true,
validate(value){
if (value.toLowerCase().includes('password')) {
throw new Error('Password cannot contain "password"')
}
}
},
age: {
type: Number, 
default: 0,
validate(value) {
if (value < 0 ){
throw new Error('Age must be a positive number')
}
}
}
})
module.exports = User

使用此用户路线

const express = require('express')
require('./db/mongoose')
const User = require('./models/user')
const Task = require('./models/task')
const app = express()
const port = process.env.PORT || 3000
app.use(express.json())
app.post('/users', async (req, res) => {
const user = new User(req.body)
try{
await user.save()
res.status(201).send(user)
} catch (e) {
res.status(400).send(e)
}
})

app.listen(port, () => {
console.log('Server is up on port' +port)
})

有人明白为什么会发生这种事吗?

希望我能在这个论坛上得到答案,继续学习。提前感谢你们的帮助。真的很感激。

试试这个,在我的情况下,我使用了这个

app.use(express.json())

低于

app.use("/users",usersController);

因此,这导致了问题,因为我的数据没有正确解析。

const express = require("express");
const app = express();
const connect = require("./config/db");
const usersController = require("./controller/user.controller");

app.use(express.json());

app.use("/users",usersController);



const start = async () => {
await connect();
app.listen(2000, async function () {
console.log("listening on port 2000");
});
};
module.exports = start;

由于您已经根据需要定义了所有这些字段:在您的模式中为true,这就是发生这种情况的原因,您必须为这些字段提供值,即在测试您的api时,在body中用一些值填充这些字段。

在您的"邮差"在发送之前;身体;然后到";生的";模块的末端;文本";即变为";JSON";这样你的代码就可以工作了。

相关内容

最新更新