Не могу получить параметры запроса bodyParser

133
29 декабря 2019, 17:30

Пишу свой первый backend для базы данных RethinkDB и столкнулся с такой проблемой, что не могу разобрать запрос в bodyParser

Вот мой код:

const Koa = require('koa')
const logger = require('koa-morgan')
const bodyParser = require('koa-bodyparser')
const Router = require('koa-router')
const r = require('rethinkdb')
const server = new Koa()
const router = new Router()
const db = async() => {
    const connection = await r.connect({
        host: 'localhost',
        port: '28015',
        db: 'getteamDB'
    })
    return connection;
}
server.use(bodyParser());
server
.use(router.routes())
.use(logger('tiny')).listen(3001)

const getUsers = async(ctx, next) => {
    await next()
  // Get the db connection.
  const connection = await db()
  // Check if a table exists.
  var exists = await r.tableList().contains('users').run(connection)
  if (exists === false) {
    ctx.throw(500, 'users table does not exist')
  }
  // Retrieve documents.
  var cursor = await r.table('users')
    .run(connection)
  var users = await cursor.toArray()
  ctx.type = 'json'
  ctx.body = users
}
const insertUser = async(ctx, next) => {
    await next()
    // Get the db connection.
    const connection = await db()
    // Throw the error if the table does not exist.
    var exists = await r.tableList().contains('users').run(connection)
    if (exists === false) {
      ctx.throw(500, 'users table does not exist')
    }
    let body = ctx.request.body || {}
    console.log('получаем имя в запросе - ', body);
    // Throw the error if no name.
    if (body.name === undefined) {
      ctx.throw(400, 'name is required')
    }
    // Throw the error if no email.
    if (body.email === undefined) {
      ctx.throw(400, 'email is required')
    }
    let document = {
      name: body.name,
      email: body.email
    }
    var result = await r.table('users')
      .insert(document, {returnChanges: true})
      .run(connection)
    ctx.body = result
  }
router
.get('/users', getUsers)
.post('/users', insertUser)

Метод getUsers работает нормально, возвращает пустой массив (БД пустая) Метод insertUser не может получить body из роута.

Подскажите, где ошибка

Консоль лог пишет {} А логгер пишет 'name is required'

Answer 1

Вместо:

  let body = ctx.request.body || {} 

использовал:

 let body = ctx.request.query || {}

Помогло решение в этом топике на SO.

READ ALSO
Откуда этот обьект __proto__?

Откуда этот обьект __proto__?

Не могу понять, вот у нас есть функция-конструктор, дальше я создаю сам экземпляр этого конструктора

131
Автоматические бэкапы всех баз данных MongoDB

Автоматические бэкапы всех баз данных MongoDB

Использую для работы с MongoDB NodeJS на Windows Server 2012Бывало такое, что, при изменении настроек MongoDB, все базы данных удалялись, а бэкапов для восстановления...

166
Как сделать простой калькулятор на HTML и Javascript

Как сделать простой калькулятор на HTML и Javascript

Я знаю, что похожие вопросы задали ранееНо всё-таки мне хотелось бы узнать, можно ли написать функцию для калькулятора, опираясь на код, мной...

157