Express Router.Post не отправляет обратно Json на Почтальон - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь выучить express и как пользоваться почтальоном, и я следую инструкциям. Все шло хорошо, пока я не протестировал router.get, отправив фиктивные данные на сервер. Я использую почтальон, чтобы попытаться отправить на свой локальный хост 500. Вместо того, чтобы получить обратно json данные, которые я отправил, я получаю статус 200 и ничего внизу экрана. Когда я проверяю консоль при попадании на этот маршрут, она записывается на консоль: http://undefined/api/members.

Имейте в виду, у меня нет проблем с использованием router.get для получения json из всех моих участников, и у меня нет проблем с получением json путем поиска только с идентификатором участника. Но по какой-то причине у меня не работает router.post. Я подозреваю, что это связано с анализатором тела. Но я не уверен, почему конкретно это не работает. Пожалуйста, помогите.

Вот так я настроил файл моего приложения:

const express = require('express')
    const app = express()
    const path = require('path');
    const logger = require('./middleware/logger')
    const bodyParser = require('body-parser')



    app.use(logger)

    app.use('/api/members', require('./routes/api/members'))

    app.use(bodyParser.json())

    app.use(bodyParser.urlencoded({extended: false}))

    app.use(express.static(path.join(__dirname, 'public')))



    const PORT = process.env.PORT || 5000
    app.listen(PORT, () => {
        console.log(`Server started on port ${[PORT]}`)
    })

Вот как я настроил файл роутера

const express = require('express')
const router = express.Router()
const members = require('../../Members')


router.get('/', (req, res) =>{
    res.json(members);
})


router.get('/:id', (req, res) => {
    const found = members.some(member => member.id === parseInt(req.params.id));

    if(found){
    res.json(members.filter(member => member.id === parseInt(req.params.id)))
    } else { 
        res.status(400).json({msg: `No member with the id of ${req.params.id}`})
    }
})


router.post('/', (req, res) => {
    res.send(req.body)
})



module.exports = router 

моего пакета. json:

{
  "name": "expressCrashCourse",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index",
    "dev": "nodemon index"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "moment": "^2.24.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.2"
  }
}

1 Ответ

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

Маршруты обрабатываются по порядку, поэтому, если вы хотите, чтобы промежуточное ПО body-parser было активным для вашего .post() маршрута, промежуточное ПО должно быть ДО этого. Таким образом, измените это:

app.use('/api/members', require('./routes/api/members'))

app.use(bodyParser.json())

app.use(bodyParser.urlencoded({extended: false}))

на следующее:

app.use(bodyParser.json())

app.use(bodyParser.urlencoded({extended: false}))

app.use('/api/members', require('./routes/api/members'))   // <== after your middleware

Как бы то ни было, он ударил по вашему маршруту до того, как промежуточное ПО получило возможность бежать, и, таким образом, req.body все еще был не заполняется содержимым тела.

...