unhandledPromiseRejectionWarning в узле JS - PullRequest
0 голосов
/ 05 ноября 2018

Я следую этому учебному пособию MERN на Youtube.

Это ссылка на Github со всеми папками и кодом.

https://github.com/bradtraversy/mern_shopping_list

Пока что соединение с базой данных установлено, я могу делать запросы GET с почтальоном, но при попытке отправить запрос POST я получаю следующее сообщение об ошибке.

unhandledPromiseRejectionWarning - проверка элемента не удалась: имя: необходимо указать путь.

Соответствующий код: server.js

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const path = require('path');

const items = require('./routes/api/items');

const app = express();


app.use(bodyParser.json());

// DB Config
const db = require('./config/keys').mongoURI;

// Connect to Mongo
mongoose
.connect(db, {useNewUrlParser: true}) // Adding new mongo url parser
.then(() => console.log('MongoDB Connected...'))
.catch(err => console.log(err));

// Use Routes
app.use('/api/items', items);

// Serve static assets if in production
if (process.env.NODE_ENV === 'production') {
// Set static folder
app.use(express.static('client/build'));

app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
}



const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server started on port ${port}`));

А это код для маршрутов, / routs / api / items

const express = require('express');
const router = express.Router();

 // Item Model
 const Item = require('../../models/Item');

// @route   GET api/items
// @desc    Get All Items
// @access  Public
 router.get('/', (req, res) => {
 Item.find()
 .sort({ date: -1 })
 .then(items => res.json(items));
  });

 // @route   POST api/items
 // @desc    Create An Item
 // @access  Public
 router.post('/', (req, res) => {
 const newItem = new Item({
 name: req.body.name
 });

 newItem.save().then(item => res.json(item));
 });

 // @route   DELETE api/items/:id
 // @desc    Delete A Item
 // @access  Public
 router.delete('/:id', (req, res) => {
 Item.findById(req.params.id)
 .then(item => item.remove().then(() => res.json({ success: true })))
 .catch(err => res.status(404).json({ success: false }));
 });

 module.exports = router;

Что здесь происходит, похоже, что в этой части есть ошибка:

 router.post('/', (req, res) => {
 const newItem = new Item({
 name: req.body.name
 });

Или путь / маршрутизация. Я в конце моего ума.

Я добавляю код Item.js здесь:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const ItemSchema = new Schema({
name: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
 });

module.exports = Item = mongoose.model('item', ItemSchema);

1 Ответ

0 голосов
/ 05 ноября 2018

это ошибка мангуста при проверке модели элемента, похоже, что req.body.name имеет значение null / undefined или ваш bodyparser не настроен правильно для вашего варианта использования.

Зависит от того, как вы обрабатываете свой запрос с настройкой почтальона или вашего bodyparser. Проверьте документацию bodyparser, в вашем случае он должен анализировать только тела json, а не URL.

Убедитесь, что ваш почтальон использует данные формы вместо тела, закодированного в URL, и ваш запрос содержит заголовок Content-Type значения application / json.

В качестве альтернативы вы можете принять кодировку json и url, добавив

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({"extended":true}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...