При использовании метода PUT тело не передается с помощью Koa - PullRequest
0 голосов
/ 27 сентября 2019

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

Данные, которые отправляются:

  request: {
    method: 'PUT',
    url: '/api/v1.0/articles/1',
    header: {
      'user-agent': 'PostmanRuntime/7.17.1',
      accept: '*/*',
      'cache-control': 'no-cache',
      host: 'localhost:3000',
      'accept-encoding': 'gzip, deflate',
      'content-length': '98',
      connection: 'keep-alive'
    }
  },
  response: {
    status: 404,
    message: 'Not Found',
    header: [Object: null prototype] {}
  },

Теперь я попытался передать его как ключи, используя другие методы, а не метод RAW, это то, что находится внутри тела, которое я пытаюсь передать:

{
    "title": "another article",
    "fullText": "again here is some text hereto fill the body"
}

Это функция, которая должна обновлять данные, но она не определена из запроса пут.


router.put("/:id", updateArticle);

function updateArticle(cnx, next) {
  let id = parseInt(cnx.params.id);
  console.log(cnx);
  if (articles[id - 1] != null) {
    //articles[id - 1].title = cnx.request.body.title;
    cnx.body = {
      message:
        "Updated Successfully: \n:" + JSON.stringify(updateArticle, null, 4)
    };
  } else {
    cnx.body = {
      message:
        "Article does not exist: \n:" + JSON.stringify(updateArticle, null, 4)
    };
  }
}

Я использую почтальон, Body -> Raw |JSON, я должен упомянуть, что все другие методы работают отлично - удалить, создать, getAll, getById

1 Ответ

1 голос
/ 27 сентября 2019

При PUT или POST данные находятся в теле запроса.У вас должен быть некоторый код (в вашем обработчике запросов или промежуточном программном обеспечении), который фактически читает тело из потока и заполняет для вас свойство body.Если у вас его нет, тогда данные все еще находятся в потоке запросов и ожидают чтения.

Вы можете увидеть пример чтения самостоятельно здесь: https://github.com/koajs/koa/issues/719- встроенное промежуточное ПО, которое сделает это за вас.

Вот пара модулей, которые сделают это промежуточное ПО для вас:

https://github.com/dlau/koa-body

https://www.npmjs.com/package/koa-body-parser

...