#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, '*')
...