ValidationError: Ошибка проверки рецепта: _listId: требуется путь `_listId` - PullRequest
0 голосов
/ 26 февраля 2020

Я новичок в node.js и пытаюсь сделать успокаивающий API поваренной книги, используя nodejs. Так что есть список и рецепты, которые должны быть в указанном списке, выбранном по идентификатору. Я пытаюсь получить listId в качестве параметров, но получил undefined значение. Почтальон показывает ошибку:

{"errors": {"_listId": {"message": "Путь _listId требуется.", "Name": "ValidatorError", "properties ": {" message ":" Путь _listId обязательно. "," тип ":" обязательно "," путь ":" _listId "}," kind ":" обязательно "," путь ":" _listId "} }, "_message": "Ошибка проверки рецепта", "message": "Ошибка проверки рецепта: _listId: путь _listId требуется.", "name": "Ошибка Validation"}

Итак вот:

//Recipe model:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const RecipeSchema = new Schema({
    title: {
        type: String,
        required: true,
        minLength: 1,
        trim: true
    },
    _listId: {
        type: mongoose.Types.ObjectId,
        required: true
    }
});

module.exports = mongoose.model('Recipe', RecipeSchema);

Маршруты рецептов:

const express = require('express');
const controller = require('../controllers/recipes');
const router = express.Router();


router.get('/' , controller.get);
router.post('/' , controller.post);
router.patch('/:id' , controller.update);
router.delete('/:id' , controller.delete);

module.exports = router;

Контроллер рецептов:

const Recipe = require('../models/recipe.model');
//get all recipes from specific list
module.exports.get = (req, res) => {
    Recipe.find({
        _listId: req.params.listId
    }).then((tasks) => {
        res.send(tasks);
    });
    console.log(req.params.listId); //undefined
};

//create new recipes in the list specified by id
module.exports.post = (req, res) => {
    let newRecipe = new Recipe({
        title: req.body.title,
        _listId: req.params.listId
    });
    console.log(req.params.listId); //undefined
    newRecipe.save().then((newRecipeDoc) => {
        res.send(newRecipeDoc);
    }).catch((e) => {
        res.send(e)
    });
};

и файл приложения. js, где я настраиваю маршрут

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const listRoutes  = require('./routes/list');
const recipeRoutes = require('./routes/recipe');
const keys = require('./config/keys');
const app = express();


mongoose.connect(keys.mongoURI,  {
    useNewUrlParser: true,
    useUnifiedTopology: true
})
    .then(() => console.log('MongoDB connected'))
    .catch(error => console.log(error));

app.use(bodyParser.json());
app.use('/lists', listRoutes);
app.use('/lists/:listId/recipes', recipeRoutes);

module.exports = app;

Запросы get / post для List работают нормально, но для Recipe у меня есть undefined значение

1 Ответ

0 голосов
/ 27 февраля 2020

хорошо, я обнаружил, что проблема может быть в том, что это кому-то поможет. Маршрут должен быть:

router.get('/:listId/recipes' , controller.get);
router.post('/:listId/recipes' , controller.post);
router.patch('/:listId/recipes:id' , controller.update);
router.delete('/:listId/recipes:id' , controller.delete);

и приложение. js Маршрут должен быть

app.use('/lists', recipeRoutes);

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