Далее. js динамические c страницы API не отвечают на запросы публикации с заголовками Content-Type = application / json - PullRequest
0 голосов
/ 22 апреля 2020

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

Как таковой Я пытался переместить как можно большую часть Express логов маршрутизации c во встроенную Next. js api routs . Я также пытаюсь заменить все мои fetch вызовы axios запросами, так как они выглядят менее многословно.

// current code
const data = await fetch("/api/endpoint", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ foo: "bar" })
}).then(x => x.json());

// what I'd like
const data = await axios.post( "/api/endpoint", { foo: "bar" });

Проблема, с которой я столкнулся, заключается в том, что Dynami c далее. js API-маршруты останавливаются, как только в теле появляются данные JSON. Я даже не получаю сообщение об ошибке, запрос просто застревает как «ожидающий решения», и обещание ожидания никогда не разрешается.

Я получаю ответы на эти вызовы, но не могу передать данные, которые мне нужны:

// obviously no data passed
const data = await axios.post( "/api/endpoint");

// req.body = {"{ foo: 'bar' }":""}, which is weird
const data = await axios.post( "/api/endpoint", JSON.stringify({ foo: "bar" })); 

// req.body = "{ foo: 'bar' }" if headers omitted from fetch, so I could just JSON.parse here, but I'm trying to get away from fetch and possible parse errors
const data = await fetch("/api/endpoint", {
  method: "POST",
  // headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ foo: "bar" })
}).then(x => x.json()); 

Если я попытаюсь позвонить axios.post("api/auth/token", {token: "foo"}), запрос просто застрянет как ожидающий и никогда не будет решен.

Сетевая панель Chrome дает мне следующую информацию для заблокированного request:

General
  Request URL: http://localhost:3000/api/auth/token
  Referrer Policy: no-referrer-when-downgrade

Request Headers
  Accept: application/json, text/plain, */*
  Accept-Encoding: gzip, deflate, br
  Accept-Language: en-US,en;q=0.9,es;q=0.8
  Connection: keep-alive
  Content-Length: 26
  Content-Type: application/json;charset=UTF-8
  Cookie: token=xxxxxxxxxxxxxxxxxxxx; session=xxxxxxxxxxxxxxxxxxxxxxx
  Host: localhost:3000
  Origin: http://localhost:3000
  Referer: http://localhost:3000/dumbtest
  Sec-Fetch-Dest: empty
  Sec-Fetch-Mode: cors
  Sec-Fetch-Site: same-origin
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36

Request Payload
  {token: "foo"}

Я пытался выяснить, что может быть причиной этого, и, похоже, все указывает на то, что существует проблема с предварительными запросами, но, поскольку они связаны с политиками CORS, я не не понимаю, почему я столкнулся с ними. Я делаю запрос от http://localhost:3000 до http://localhost:3000/api/auth/token.

Несмотря на это, я попытался добавить промежуточное ПО cors, как показано в примере next. js , но это не имеет значения. Насколько я могу судить, запрос даже не попадает на сервер - у меня есть console.log вызов в качестве первой строки в обработчике, но он никогда не запускается этими запросами.

Есть ли что-то очевидное Я скучаю? Такое ощущение, что это должен быть простой переход, но я провел последние полтора дня, пытаясь выяснить это, но я продолжаю достигать одной и той же точки с каждым решением, которое я пробую - глядя на серый ожидающий запрос в моем Вкладка «Сеть» и консоль сообщают об отсутствии ошибок или чего-либо еще.

1 Ответ

0 голосов
/ 23 апреля 2020

После еще нескольких часов поиска я нашел свой ответ здесь

Оказывается, так как я использовал промежуточное ПО bodyParser на моем express сервере, мне пришлось отключить Next Разбор тела, добавив это в верхней части моего файла:

export const config = {
  api: {
    bodyParser: false,
  },
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...