@Mark321

Как обработать post запрос на nodejs?

Отправляю с клиента POST запрос:

await axios.post('http://localhost:5000/api/todos', { category });


category - строка

На сервере обрабатываю запрос таким способом:

const server = http.createServer(async (req, res) => {
  if (req.url === `/api/todos` && req.method === 'POST') {
    // get the todos.
    const todos = await new Todo().getTodos();
    const queryObject = url.parse(req.url, true).query;

    res.writeHead(200, {
      'Content-Type': 'application/json',
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': 'POST OPTIONS',
      'Access-Control-Allow-Credentials': 'true',
    });
    res.end(JSON.stringify(todos);
  }


Если делаю GET запрос без тела запроса(без category), то все отрабатывает. При изменении запроса на POST и добавление в запрос тела запроса(category) получаю ошибку CORS:

Access to XMLHttpRequest at 'http://localhost:5000/api/todos' from origin 'http://localhost:5173' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
  • Вопрос задан
  • 504 просмотра
Решения вопроса 1
black1277
@black1277
Вольный стрелок
Есть простые и сложные запросы CORS. Когда запрос сложный - браузер отправляет 2 запроса сначала OPTIONS затем основной. GET - простой запрос - поэтому у вас всё работает правильно. POST - тоже простой запрос, но если изменить ему Content-Type на 'application/json' он становится сложным. Ваш сервер не отвечает на предварительный запрос OPTIONS, поэтому браузер блокирует ответ. Читайте подробнее, например здесь
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы