Javascript NodeJS MonogoDB邮递员Post请求引发错误,可能是objectID错误
大家好,我学习node js已经有一段时间了,但在花了太多时间后,我遇到了一个很难自己修复的错误,原因是我可能以错误的方式传递ObjectID,尽管我的端点工作正常,但我无法在POSTMAN中调用post call。下面是一些片段 邮递员通过Json发布请求Javascript NodeJS MonogoDB邮递员Post请求引发错误,可能是objectID错误,javascript,node.js,mongoose,backend,Javascript,Node.js,Mongoose,Backend,大家好,我学习node js已经有一段时间了,但在花了太多时间后,我遇到了一个很难自己修复的错误,原因是我可能以错误的方式传递ObjectID,尽管我的端点工作正常,但我无法在POSTMAN中调用post call。下面是一些片段 邮递员通过Json发布请求 { "genreId":"5f65c490db297fa17cd4f060", "title": "Trminator", "numberInS
{
"genreId":"5f65c490db297fa17cd4f060",
"title": "Trminator",
"numberInStock": 0,
"dailyRentalRate": 0
}
终端错误
未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“genreId”
在C:\Users\Sharjeel MK\Desktop\Project-构建流派API\routes\movies.js:16:47
index.js
const express = require ('express');
const app=express();
const home=require('./routes/home');
const genres=require('./routes/genres');
const customers=require('./routes/customers');
const movies = require('./routes/movies')
const mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/vidly',{
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
})
.then(()=>console.log("connected")).
catch((e)=>console.log('not connnected',e));
app.use('/',home);
app.use('/vidly.com/api/genres',genres);
app.use('/vidly.com/api/customers',customers);
app.use('/vidly.com/api/movies',movies);
const port=process.env.PORT||3000;
app.listen(port,()=>{
console.log(`${port} listening`);})
const Joi = require('joi');
const mongoose = require('mongoose');
const {genreSchema} = require('./genreModel');
const Movie = mongoose.model('Movies', new mongoose.Schema({
title: {
type: String,
required: true,
trim: true,
minlength: 5,
maxlength: 255
},
genre: {
type: genreSchema,
required: true
},
numberInStock: {
type: Number,
required: true,
min: 0,
max: 255
},
dailyRentalRate: {
type: Number,
required: true,
min: 0,
max: 255
}
}));
function validateMovie(movie) {
const schema = {
title: Joi.string().min(5).max(50).required(),
genreId: Joi.string().required(),
numberInStock: Joi.number().min(0).required(),
dailyRentalRate: Joi.number().min(0).required()
};
return Joi.validate(movie, schema);
}
exports.Movie = Movie;
exports.validate = validateMovie;
在movie.js中
const {Movie, validate} = require('../model/movieModel');
const {Genre} = require('../model/genreModel');
const mongoose = require('mongoose');
const express = require('express');
const routes = express.Router();
routes.get('/', async (req, res) => {
const movies = await Movie.find().sort('name');
res.send(movies);
});
routes.post('/', async (req, res) => {
const { error } = validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
const genre = await Genre.findById(req.body.genreId);
if (!genre) return res.status(400).send('Invalid genre.');
let movie = new Movie({
title: req.body.title,
genre: {
_id: genre._id,
name: genre.name
},
numberInStock: req.body.numberInStock,
dailyRentalRate: req.body.dailyRentalRate
});
movie = await movie.save();
res.send(movie);
});
routes.put('/:id', async (req, res) => {
const { error } = validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
const genre = await Genre.findById(req.body.genreId);
if (!genre) return res.status(400).send('Invalid genre.');
const movie = await Movie.findByIdAndUpdate(req.params.id,
{
title: req.body.title,
genre: {
_id: genre._id,
name: genre.name
},
numberInStock: req.body.numberInStock,
dailyRentalRate: req.body.dailyRentalRate
}, { new: true });
if (!movie) return res.status(404).send('The movie with the given ID was not found.');
res.send(movie);
});
routes.delete('/:id', async (req, res) => {
const movie = await Movie.findByIdAndRemove(req.params.id);
if (!movie) return res.status(404).send('The movie with the given ID was not found.');
res.send(movie);
});
routes.get('/:id', async (req, res) => {
const movie = await Movie.findById(req.params.id);
if (!movie) return res.status(404).send('The movie with the given ID was not found.');
res.send(movie);
});
module.exports = routes;
电影的模式模型
const express = require ('express');
const app=express();
const home=require('./routes/home');
const genres=require('./routes/genres');
const customers=require('./routes/customers');
const movies = require('./routes/movies')
const mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/vidly',{
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
})
.then(()=>console.log("connected")).
catch((e)=>console.log('not connnected',e));
app.use('/',home);
app.use('/vidly.com/api/genres',genres);
app.use('/vidly.com/api/customers',customers);
app.use('/vidly.com/api/movies',movies);
const port=process.env.PORT||3000;
app.listen(port,()=>{
console.log(`${port} listening`);})
const Joi = require('joi');
const mongoose = require('mongoose');
const {genreSchema} = require('./genreModel');
const Movie = mongoose.model('Movies', new mongoose.Schema({
title: {
type: String,
required: true,
trim: true,
minlength: 5,
maxlength: 255
},
genre: {
type: genreSchema,
required: true
},
numberInStock: {
type: Number,
required: true,
min: 0,
max: 255
},
dailyRentalRate: {
type: Number,
required: true,
min: 0,
max: 255
}
}));
function validateMovie(movie) {
const schema = {
title: Joi.string().min(5).max(50).required(),
genreId: Joi.string().required(),
numberInStock: Joi.number().min(0).required(),
dailyRentalRate: Joi.number().min(0).required()
};
return Joi.validate(movie, schema);
}
exports.Movie = Movie;
exports.validate = validateMovie;
用户findOne->以下是语法
var query = {
genreId : req.body.genreId
}
Model-Name.findOne(query, function(err, result){
if(err) throw err
else res.send(200, result)
})
因此,在花了2天时间终于找出了错误的原因之后,原因就简单多了,我没有在index.js文件中将传入请求对象的express.json()作为json对象传递。这就是它抛出错误的原因,原因是无法正确处理 以前的代码
const express = require ('express');
const app=express();
const home=require('./routes/home');
const genres=require('./routes/genres');
const customers=require('./routes/customers');
const movies = require('./routes/movies')
const mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/vidly',{
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
})
.then(()=>console.log("connected")).
catch((e)=>console.log('not connnected',e));
app.use('/',home);
app.use('/vidly.com/api/genres',genres);
app.use('/vidly.com/api/customers',customers);
app.use('/vidly.com/api/movies',movies);
const port=process.env.PORT||3000;
app.listen(port,()=>{
console.log(`${port} listening`);})
const express = require ('express');
const app=express();
const home=require('./routes/home');
const genres=require('./routes/genres');
const customers=require('./routes/customers');
const movies = require('./routes/movies')
const mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/vidly',{
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
})
.then(()=>console.log("connected")).
catch((e)=>console.log('not connnected',e));
app.use(express.json());
app.use('/',home);
app.use('/vidly.com/api/genres',genres);
app.use('/vidly.com/api/customers',customers);
app.use('/vidly.com/api/movies',movies);
const port=process.env.PORT||3000;
app.listen(port,()=>{
console.log(`${port} listening`);
})
更新代码
const express = require ('express');
const app=express();
const home=require('./routes/home');
const genres=require('./routes/genres');
const customers=require('./routes/customers');
const movies = require('./routes/movies')
const mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/vidly',{
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
})
.then(()=>console.log("connected")).
catch((e)=>console.log('not connnected',e));
app.use('/',home);
app.use('/vidly.com/api/genres',genres);
app.use('/vidly.com/api/customers',customers);
app.use('/vidly.com/api/movies',movies);
const port=process.env.PORT||3000;
app.listen(port,()=>{
console.log(`${port} listening`);})
const express = require ('express');
const app=express();
const home=require('./routes/home');
const genres=require('./routes/genres');
const customers=require('./routes/customers');
const movies = require('./routes/movies')
const mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/vidly',{
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
})
.then(()=>console.log("connected")).
catch((e)=>console.log('not connnected',e));
app.use(express.json());
app.use('/',home);
app.use('/vidly.com/api/genres',genres);
app.use('/vidly.com/api/customers',customers);
app.use('/vidly.com/api/movies',movies);
const port=process.env.PORT||3000;
app.listen(port,()=>{
console.log(`${port} listening`);
})