Проблема с промежуточным программным обеспечением Express (взаимодействующим с MongoDB) - req.body метода POST не стирает пробелы и возвращает ошибку непригодного объекта - PullRequest
1 голос
/ 18 марта 2020

У меня проблема с использованием Express 'req.body (с использованием MongoDB в этом приложении)

Это не ошибка с маршрутами - метод GET работает нормально, а метод POST работает, если я не хава требование валидации. Проблема возникает, когда я использую req.body маршрута POST. Я занимаюсь этим часами .. пожалуйста, помогите

Вот мой сервер. js

const express = require('express');
const app = express()
const mongoose = require('mongoose');
const http = require('http').createServer(app);
const io = require('socket.io')(http);

const groups = require('./routes/api/groups')

// Middleware
app.use(express.urlencoded({extended: true}));


// DB config
const dbURL = require("./config/keys").mongoURI;

// Connect to mongoDB
mongoose.connect(dbURL, {useNewUrlParser: true, useUnifiedTopology: true})
    .then(console.log("MongoDB connected..."))
    .catch(err => console.log(err)) 


// Use Routes ** THIS LEADS TO THE SECOND CODE **
app.use('/api/groups', groups)

const port = process.env.PORT || 3500

app.listen(port, ()=> console.log(`Server is listening at port ${port}`))

group. js для обработки всех групповых маршрутов

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

const Group = require('../../models/Group')

router.get('/', (req, res) => {
    Group.find()
        // sort by date descending
        .sort({ date: -1})
        .then(groups => res.json(groups))    
})

router.post('/', (req, res) => {
    console.log(req.body)
    const newGroup = new Group({
        name: req.body.name,
    })
    newGroup.save( err => {
        if (err) {
            console.error(err)
        } else {
            console.log("saved!")   
        }
    })
})

Схема группы

const mongoose = require("mongoose");

let groupSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
},{
    timestamps: true
})

module.exports = mongoose.model("group", groupSchema)

Я использовал Postman для отправки запроса POST:

{
   "name": "Hello!"
}

и получаю это на консоли: из console.log (req.body) - Второй набор кодов в router.post:

{ '{\n\t"name": "Hello!"\n}': '' }

Я думал, что промежуточное ПО express (которое теперь включает в себя body-parser) должно удалить пробелы. Ошибка проверки связана с невозможностью доступа к ключу «имя».

Я ценю ваше время и помощь!

1 Ответ

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

Attach body-parser правильно:

const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({extended: true})); // content-type: application/x-www-form-urlencoded

app.use(bodyParser.json()); // content-type: application/json
...