Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS MonogoDB邮递员Post请求引发错误,可能是objectID错误_Javascript_Node.js_Mongoose_Backend - Fatal编程技术网

Javascript NodeJS MonogoDB邮递员Post请求引发错误,可能是objectID错误

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

大家好,我学习node js已经有一段时间了,但在花了太多时间后,我遇到了一个很难自己修复的错误,原因是我可能以错误的方式传递ObjectID,尽管我的端点工作正常,但我无法在POSTMAN中调用post call。下面是一些片段 邮递员通过Json发布请求

{   
"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`);
      })