получение net :: ERR_EMPTY_RESPONSE, только если запрос является запросом PATCH (CORS включен) - PullRequest
0 голосов
/ 12 апреля 2020

Я создаю приложение с реакцией на стороне клиента и nodejs на стороне сервера.

, когда я пытаюсь извлечь данные с помощью запроса PATCH из приложения nodejs, я получаю эту ошибку:

  • Chome: патч http://127.0.0.1: 8080 / api / userr net :: ERR_EMPTY_RESPONSE
  • Firefox: запрос перекрестного происхождения заблокирован: тот же источник Политика запрещает чтение удаленного ресурса по адресу http://127.0.0.1: 8080 / api / userr . (Причина: запрос CORS не выполнен).

однако, если я переключаю метод (например, на POST), я не получаю ошибок.

код, когда происходит ошибка:

клиент:

fetch("http://127.0.0.1:8080/api/userr", {
      method: "patch",
      body: {
        sessionID: this.state.sessionID,
        field: input.id,
        [input.id]: input.value
      },
    }

nodejs:

app.patch("/api/userr", (req, res) => {
  console.log(req.body);
  res.send({a: 2})
})

код, когда ошибка не возникает:

клиент:

fetch("http://127.0.0.1:8080/api/userr", {
      method: "post",
      body: {
        sessionID: this.state.sessionID,
        field: input.id,
        [input.id]: input.value
      },
    }

nodejs:

app.post("/api/userr", (req, res) => {
  console.log(req.body);
  res.send({a: 2})
})

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

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', '*');
  if (req.method === 'OPTIONS') {
      res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
      res.header('Access-Control-Allow-Methods', '*');
      res.header('Access-Control-Allow-Credentials', true);
      return res.status(200).json({});
  };
  next();
});

Я думаю, что эта ошибка связана с CORS, потому что когда я использую стороннее приложение, такое как почтальон, оно работает нормально. Я проверил, что произойдет, если я отправлю запрос OPTIONS на URL, но все выглядело хорошо. это ответ, который я получил.

"X-Powered-By": "Express"
"Access-Control-Allow-Origin": "*"
"Access-Control-Allow-Headers": "Origin X-Requested-With Content-Type Accept Authorization"
"Access-Control-Allow-Methods": "*"
"Access-Control-Allow-Credentials": "true"
"Content-Type": "application/json; charset=utf-8"
"Content-Length": "2"
"ETag": "W/\"2-vyGp6PvFo4RvsFtPoIWeCReyIC8\""
"Date": "Sun 12 Apr 2020 14: 50: 07 GMT"
...