繁体   English   中英

NodeJS MonogoDB Postman Post Request 抛出错误可能是 objectID 错误

[英]NodeJS MonogoDB Postman Post Request throwing an Error probably the objectID Error

嗨,我正在学习 node js 很长一段时间,但面临一个错误,在花了很多时间之后,我自己很难修复它,原因是我可能以错误的方式传递 ObjectID,尽管我的端点工作正常,我无法在 POSTMAN 中调用 post-call。 这里有一些片段POSTMAN Post 请求由 Json

{   
"genreId":"5f65c490db297fa17cd4f060",
"title": "Trminator",
"numberInStock": 0,
"dailyRentalRate": 0

}

终端错误

UnhandledPromiseRejectionWarning: TypeError: 无法读取 C:\\Users\\Sharjeel MK\\Desktop\\Project- Build the Genres API\\routes\\movies.js:16:47 处未定义的属性“genreId”

索引.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`);})

在路由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 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`);
      })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM