2015-10-21 5 views
2

Я пытаюсь изучить Node.js (создание REST API и отправка сообщения с сервера). Поэтому у меня есть проблема с отправкой ответа с сервера на клиентскую сторону. Когда я регистрирую запрос со стороны сервера, я вижу запрос, но я не могу отправить сообщение на клиентскую сторону.Как получить простой ответ от node.js-сервера?

Мой Node.js сервер:

//handle a user request 
function onRequest(request, response){ 
    if(request.method =='GET' && request.url=='/'){ 
     response.writeHead(200, {"Content-Type":"text/html"}); 
     fs.createReadStream("./index.html").pipe(response); 
     console.log(request.url); 
    } 
    else if(request.method =='GET' && request.url=='/try'){ 
    console.log("I am getting the request"); 
    response.writeHead(200, {"Content-Type":"text/plain","Access-Control-Allow Origin":"*"}); 

     response.write("test message"); 
     response.end(); 
    } 
    else{ 
     console.log(request.url); 
     send404Response(response); 
    } 

} 

http.createServer(onRequest).listen(8888); 

Мой стороне клиента функция:

function sendRequest(){ 

     var xhttp = new XMLHttpRequest(); 
     xhttp.onreadystatechange = function() { 
      if (xhttp.onreadystatechange==4 && xhttp.status == 200) { 
      alert("test alert") ; 
      } 
     } 
     xhttp.open("GET", "http://127.0.0.1:8888/try", true); 
     xhttp.send(); 

     } 

Любая помощь приветствуется ... спасибо заранее

+0

Вы пытались изменить код клиента на «предупреждение» на всех условиях, а не только на статус 200? Также, если вы запускаете клиент из браузера, это может помочь увидеть журнал консоли (как в F12 на хроме). –

+0

Обновлен вопрос с результатом консоли хром – user1722022

+0

Обновлен вопрос о текущем состоянии ... Я ничего не получаю на консоли хром, и я не получаю предупреждение – user1722022

ответ

1

Я решил эту проблему, изменив, если заявление от:

if (xhttp.onreadystatechange==4 && xhttp.status == 200) 

To:

if (xhttp.readyState==4 && xhttp.status == 200) 
+0

При попытке кодирования в ваниле Javascript интересен (начался сам по себе), я бы предложил вам взглянуть на некоторые библиотеки, которые упрощают выполнение HTTP-запросов. Клиентская сторона, которую вы, возможно, захотите использовать JQuery, на стороне сервера, вы можете использовать модуль запроса для nodejs. Оба ведут к более простым HTTP-запросам, чем ванильный Javascript. – Danmoreng

0

Попробуйте добавить «Access-Control -Allow-Origin 'в ваш заголовок ответа:

Вот ссылка, которая объясняет CORS: http://www.html5rocks.com/en/tutorials/cors/

+0

Я пробовал это, но он создает еще одну ошибку: net :: ERR_CONNECTION_RESET – user1722022

+0

Можете ли вы опубликовать код, который устанавливает заголовок? –

+0

обновил вопрос ... У меня сейчас ничего не получается, но я не получаю предупреждение – user1722022

0

Спасибо за обновление. Кажется, вы столкнулись с печально известной проблемой кросс-доменных запросов ... это проблема с безопасностью, грубо говоря, браузеры не позволят загружать страницу с одного сайта на выпуск аякс-запросов на другой сайт.

Другими словами, имеет значение, как ваш браузер открыл этот html, который выдает запрос ajax. Это должно быть хорошо, если сама страница была получена, скажем, через 'http://127.0.0.1:8888/index.html' (где index.html имеет какую-то кнопку или что-то другое, что выдает ajax). Если ваше окончательное намерение действительно развертывать статическую страницу на том же сервере + порт, который создает динамические ответы, все в порядке. Если вы имели в виду, чтобы они были размещены на разных машинах/портов, вам, вероятно, нужно искать в CORS ...

+0

Мое намерение состоит в создании статической страницы на localhost: 8888 /, которая делает динамические ответы ... Но после добавления «Access- Control-Allow-Origin 'для моего ответа. Я получаю сообщение об ошибке net :: ERR_CONNECTION_RESET – user1722022

+0

Просто, чтобы уточнить - вы действительно следовали этому намерению и убедились, что браузер открывает вашу страницу через http://127.0.0.1 (а не «localhost», потому что это не соответствует вашему xhttp.open код)? Если это так, вам не нужно, чтобы «разрешить происхождение». Разрешить начало для кросс-домена (= если вы открываете свою страницу по-разному), и если вы хотите перекрестный домен, тогда это может потребовать некоторой надлежащей сторонней реализации, иногда это может быть больше, чем просто заголовок (например, согласование «предполетной») –

+0

да, вы правы ... Во время отладки я понял, что если я использую 127.0.0.1, нет необходимости добавлять заголовок «access-control-allow-origin». Кстати, проблема была в утверждении if.Я добавил ответ – user1722022

Смежные вопросы