Тело запроса POST не определено с помощью koa-body

#javascript #node.js #rest #koa #koa-router

#javascript #node.js #остальное #koa #koa-маршрутизатор

Вопрос:

Я впервые пытаюсь выполнить запрос POST с помощью Postman, используя Koa в моем приложении. У меня есть маршрутизатор и анализатор тела, но по какой-то причине я все еще получаю сообщение об ошибке, в котором говорится, что тело моего запроса не определено. Я думаю, что анализатор тела не работает, но я понятия не имею, почему.

routes.js

 const Koa = require('koa');
const bodyParser = require('koa-body')
const Router = require('koa-router')

const app = new Koa()
const router = new Router()

const Topic = require('./models/topic')

router.post('/topics', bodyParser(), async (ctx) => {
    console.log(JSON.stringify(ctx.request.body))

    const { name } = ctx.request.body
    newPost = {
        name: {name}
    }

    let newTopic = new Topic(newPost)

    await newTopic.save(function(error, newPost){
        if (error) {
            console.log(error)
        } else {
        
        res.status(201).json({
            message : 'Name added!'
            }).send(newPost)
        } 
    })

    return
})

app
  .use(router.allowedMethods())
  .use(router.routes())
  
module.exports = router
  

topic.js

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

const TopicSchema = new Schema(
    {
        name: {type: String, required: true },
        viewCount: {type: Number, default: 0 }
    },
    {
        timestamps: true
    }
)

module.exports = mongoose.model('two/Topic', TopicSchema)
  

Сообщение об ошибке:

 {}

Error: two/Topic validation failed: name: Cast to string failed for value "{ name: undefined }" at path "name"

at ValidationError.inspect (/home/node/app/node_modules/mongoose/lib/error/validation.js:47:26) ...

  

Редактировать
Также добавление в server.js для дополнительной справки

 const Koa = require('koa');
const mongoose = require('mongoose');

const router = require('./routes');


const app = new Koa();
app.use(require('koa-body')());
app.use(router.routes());

mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => {
        const listener = app.listen(process.env.APP_PORT || 3000, () =>
            console.log('App started on port '   listener.address().port)
        )
    })
    .catch((error) => {
        console.log(error)
        process.exit(1)
    })

//    app.proxy = true;
module.exports = app;
  

Комментарии:

1. console.log(JSON.stringify(ctx.request.body)) Не определен журнал? Как выглядит ваш запрос?

2. @eol он регистрирует пустые фигурные скобки, показанные поверх сообщения об ошибке