TypeError: Невозможно прочитать свойство isPrivate из undefined - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь обновить модель, которую я создал, используя метод mon goose findByIdAndUpdate. Однако я продолжаю получать сообщение об ошибке, что модель атрибута, который я пытаюсь изменить, не определена. ниже приведен код.

Вот моя схема эскиза

//create new schema
const Schema = mongoose.Schema;
//sketch schema with 2 fields
const sketchSchema = new Schema({
    name: { type: String, default: 'sketch.js' },
    isPrivate: {type: Boolean, default: true }
}, {
    timestamps: true, //this means it automatically let you know when it was created and modified
})

//create a model from the user schema def to use it
const Sketch = mongoose.model('Sketch', sketchSchema);

module.exports = Sketch;

Мой код API

router.route("/sketches/:id").put((req, res) => {

  //find sketch by id and ONLY update privacy field

  Sketch.findByIdAndUpdate(req.params.id, 
      {
       $set: {isPrivate: req.body.isPrivate}
  },{
      new: true
  })
  .then(sketch => {
      sketch.save()
      .then(() => res.json(sketch))
  })
  .catch(err => res.status(400).json('Error: ' + err))
})

Вот код моего серверного приложения

//create instances of express and CORS
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');

//this
require('dotenv').config()

//create server app
const app = express();
//what is this line saying
const port = process.env.PORT || 5000;


const sketchRouter = require('./routes');
app.use('/exercises', sketchRouter);

//Middleware 
app.use(cors());
app.use(express.json());

//mongoDB database set up
const uri  = process.env.ATLAS_URI;
mongoose.connect(uri, {useNewUrlParser: true, useCreateIndex: true}) 
const connection = mongoose.connection;
connection.once('open', () => {
    console.log("MongoDB DB est. successfully")
})


//Start the server
app.listen(port, () => { 
    console.log(`Server is running on port: ${port}`);
});


Я использую почтальон для проверки этого запроса на размещение заданного c эскиза по его идентификатору объекта и передаю в теле запроса на изменение поле IsPrivate эскиза от истинного до ложного

Изображение тела запроса с использованием здесь почтальона

Почтальон положил изображение запроса

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Я наконец понял, почему я получаю неопределенное сообщение об ошибке. Это произошло из-за моего неправильного выбора кода: в частности, настройки файла маршрутов, который будет использоваться ДО основного промежуточного программного обеспечения приложения. По сути, все функции API не были включены JSON.

0 голосов
/ 18 марта 2020

Ваш req.body не определен. Вы пытались проверить значение или req или req.body? Без большего количества данных я не могу сказать, почему это не определено ... но это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...