Не могу сделать fetch запрос с методом PUT и POST
Когда делаю fetch запрос на сервер, все хорошо, но как только я делаю POST или GET запрос с телом, все рушится, помогите пожалуйста, если что, все на локал хосте, на разных портах, про CORS знаю, с этим разобрался. Основная проблема в том, что если в запросе есть тело, он даже до сервера не доходит. Фронт на чистом HTML CSS JS, бэк на чистом node.js(и express)Также прилагаю все нужное:
функция для запроса с фронтенда:
async function Connect(endpoint, data){
try{
let response = await fetch(url + endpoint,{
method: "PUT",
mode: "no-cors",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
}
);
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' +
response.status);
return;
}
let resp = await response.json();
return resp
}
catch(e){
console.log('Fetch Error :-S', e);
}
}
код сервера:
const os = require("os");
const http = require("http");
const express = require("express");
const app = express();
app.use(express.json());
app.use(express.static("public"));
app.put("/users/test", function(req, res){
console.log("lol")
res.setHeader('Content-Type', 'application/json');
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true)
// if(!req.body) return res.sendStatus(400);
console.log(req.body);
res.send("ok")
});
app.listen(5000, function(){
console.log("Сервер ожидает подключения...");
});
ошибка в консоли браузера:
Fetch Error :-S TypeError: Window.fetch: Invalid request method PUT.
изменено: сказали, мол, надо выключить no-cors mode, в нем нет метода пут, но во-первых, если изменить пут на пост, ничего не изменится, а во вторых, если выключить no-cors mode, будет выдаваться ошибка
Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://127.0.0.1:5000/users/lol. (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»). Код состояния: 200
Учитывая то, что эндпоинт /users/lol предусматривает корс, такая ошибка обозначает, что fetch не доходит до сервера(об этом я писал ранее), но почему? А может и не это значит и я ошибаюсь.
Ответы (1 шт):
Я ваш код запустил Chrome и получил явный ответ на ваш вопрос:
TypeError: Failed to execute 'fetch' on 'Window': 'PUT' is unsupported in no-cors mode..
Вот исправный код:
await fetch(url + endpoint,{
method: "PUT",
mode: "cors",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
});