Запрос POST с использованием выборки не работает

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

  writeToFile = (data = {}) => {
    let url = "http://localhost:8000/write";
    console.info(data);
    return fetch(url, {
      method: 'post',
      headers: {
        'Accept': 'application/json, text/plain, */*',
        'Content-Type': 'application/json'
      },
        body: JSON.stringify({"content": "some content"})
      }).then(res=>res.json())
        .then(res => console.info(res));
  }                     

Однако это дает мне следующую ошибку:

Запрос POST с использованием выборки не работает

Такой же запрос работает в почтальоне (приложение для тестирования API). Это запрос типа application/json, ожидающий ответа того же типа.

Изменить 1:

Так выглядит запрос на POSTMAN:
Запрос POST с использованием выборки не работает

В том же приложении запрос GET (ниже кода) работает нормально:

  readFromFile = () => {
    fetch('http://localhost:8000/read')
      .then(function(response) {
        return response.json();
      })
      .then((myJson) => {
        console.info(myJson.content);
        this.setState({messages: this.state.messages.concat({content: myJson.content, type: 'received'})});
        console.info(this.state.messages);
      });
  }             

Соответствующий код на стороне сервера:

function writeToFile(request, response) {
    var body = '';

    request.on('data', function (data) {
        body += data;
        // Too much POST data, kill the connection!
        // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
        if (body.length > 1e6)
            request.connection.destroy();
    });

    request.on('end', function () {
        // const dataToWrite = JSON.parse(body)["content"];
        // console.info(dataToWrite);
        myFileModule.fileWriter(JSON.parse(body)["content"]);
        response = allowCORS(response);
        response.writeHead(200, {'Content-Type': 'application/json'});
        response.write(JSON.stringify({ content: "success..." }));
        response.end();
    });
}

function postRequestHandler(request, response) {

    var path = url.parse(request.url).pathname;

    switch (path) {
        case '/write':
            writeToFile(request, response);
            break;
        default:
            response = allowCORS(response);
            response.writeHead(404, {'Content-Type': 'application/json'});
            response.write(JSON.stringify({ content: "Path not defined" }));
            response.end();
            break;
    }
}


function allowCORS(response) {
    response.setHeader('Access-Control-Allow-Origin', '*');
    response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); // If needed
    response.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); // If needed
    response.setHeader('Access-Control-Allow-Credentials', true); // If needed
    return response;
}

Кажется, проблема с CORS? Какое сообщение вы получаете через почтальон?

Suresh Prajapati 16.08.2018 10:08

@SureshPrajapati обновил мой вопрос. Добавлен фрагмент почтового запроса через приложение почтальон.

noobie 16.08.2018 10:11

Ваш сервер API и клиентское приложение работают на другом хосте: порту? также, что вы используете на внутреннем сервере (nodejs?). Возможно, вам нужно разрешить CORS из бэкэнда

Suresh Prajapati 16.08.2018 10:12

@SureshPrajapati Да. Сервер находится на post:8000, а клиентское приложение - на port:3000. Я также использую get request в другом месте того же приложения, которое работает нормально. У меня проблема только с почтовым запросом. В моем серверном приложении Node.js я разрешил CORS, поэтому запрос на получение работает.

noobie 16.08.2018 10:14

Какую структуру использует ваш сервер API?

Suresh Prajapati 16.08.2018 10:16

Сервер API @SureshPrajapati использует простой node.js

noobie 16.08.2018 10:17

с экспресс в качестве рамки? или что-то другое?

Suresh Prajapati 16.08.2018 10:18

Позвольте нам продолжить обсуждение в чате.

Suresh Prajapati 16.08.2018 10:19

@SureshPrajapati Без использования внешней структуры, только Node.js

noobie 16.08.2018 10:19

Вам нужно поделиться своим внутренним кодом, чтобы включить CORS, или, если он включен, возможно, вам придется проверить, почему он возвращает 404 (возможно, что-то пропущено)

Suresh Prajapati 16.08.2018 10:21

Ваша функция allowCORS должна запускаться для каждого запроса, прежде чем он дойдет до любого обработчика (здесь - writeToFile). Так что OPTIONS req преуспеет со всем необходимым заголовком и браузером, затем инициирует POST req

Suresh Prajapati 16.08.2018 10:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
11
1 823
1

Ответы 1

Если вы используете модуль http для создания сервера, попробуйте:

var server;
server = http.createServer(function(req,res){
    // Set CORS headers
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Request-Method', '*');
    res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET, POST, PATCH, DELETE, PUT');
    res.setHeader('Access-Control-Allow-Headers', '*');
    if ( req.method === 'OPTIONS' ) {
        res.writeHead(200);
        res.end();
        return;
    }

    // ...
});

Другие вопросы по теме