Что именно я должен использовать в качестве аргумента ‘url’ в http-запросе, если я запускаю Node.js сервер локально?

#javascript #node.js #ajax #http #mongoose

#javascript #node.js #ajax #http #mongoose

Вопрос:

Я пытаюсь отправить простой http-запрос на мой локальный сервер (выполняется с помощью Node.js). Как должен выглядеть мой необходимый URL?

Я пытаюсь заставить мой веб-сайт вести себя следующим образом: после нажатия кнопки запускается скрипт. Скрипт формирует http-запрос и отправляет его на мой сервер Node, который я запускаю локально на своем компьютере с помощью командной строки. Сервер узла обрабатывает http-запрос, извлекает данные из моей базы данных mongodb и отвечает этими данными на мой скрипт. Наконец, скрипт должен выводить данные в виде содержимого на веб-странице. Проблема в том, что я получаю эту ошибку в консоли браузера:

‘Доступ к XMLHttpRequest at ‘file:///C:/…/serverSide.js ‘из источника ‘null’ заблокирован политикой CORS: запросы с разными источниками поддерживаются только для схем протоколов: http, data, chrome, chrome-extension, https.’

Я предполагаю, что это из-за недопустимого URL, который я использовал в качестве аргумента в своем http-запросе. Все мои файлы (html, скрипт и серверная часть узла) находятся в одной папке. Я уже использовал следующие url значения: 'serverSide.js' , 'http://localhost:8080/' , 'localhost:8080' и все они вызвали ошибку, которая приведена выше. Итак, что я должен использовать как url ?

мой скрипт:

 function textOutput() {

    let xhttp = new XMLHttpRequest();

    xhttp.onreadystatechange = function () {
        if ( this.readyState == 4 amp;amp; this.status == 200 ) {
            document.getElementById('questionText').innerHTML = 
this.responseText
        }
    };

    xhttp.open('GET', 'serverSide.js', true);
    xhttp.send();
};
  

вот часть моего сервера, которая обрабатывает запрос:

 ...
http.createServer(function (req, res) {
    ukrlitquestions.findOne({id: randomId(1, docsAmount)}, 'text', 
function(err, result) {
        if (err) console.log(err);
        let quesText = result.text;
        res.write(quesText);
        console.log(quesText);
        res.end();
    });
}).listen(8080);
...
  

Комментарии:

1. Добавьте res.setHeader('Access-Control-Allow-Origin , ‘*» в начале createServer функции обратного вызова. Подробнее читайте в CORS. Вот хороший пример gist.github.com/balupton/3696140

Ответ №1:

Вам нужно указать на правильный домен. Что-то вроде http://localhost:3000/server-side.js

Комментарии:

1. Я только что опробовал этот вариант, и я все еще получаю ту же ошибку

Ответ №2:

То, что вы видите, является ошибкой CORS. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Веб-браузер отправляет запрос ОПЦИИ перед отправкой реального запроса. URL должен быть чем-то вроде http://localhost:8080/server-side.js

Попробуйте добавить следующее на стороне сервера:

  if (req.method === "OPTIONS") {
    res.sendStatus(200);
  }
  

Ответ №3:

Откройте http.open(‘GET’, ‘http://localhost:8080/serverSide.js ‘, true)

Ответ №4:

Вам нужно разрешить CORS с вашего сервера. Вы можете достичь этого, добавив это.

 ...
http.createServer(function (req, res) {
  res.setHeader('Access-Control-Allow-Origin, '*')
  ...