2015-10-21 91 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

您是否尝试将客户端代码更改为在所有条件下“alert”,而不仅仅是状态200?另外,如果您从浏览器运行客户端,则可能有助于查看控制台日志(如在Chrome上的F12中)。 –

+0

更新,更新为当前状态的问题铬控制台结果 – user1722022

+0

这个问题......我没有得到铬控制台上的任何东西,我没有得到任何警告我 – user1722022

回答

1

我从改变if语句解决了这个问题:

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

要:

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

试图在香草代码Javascript是有趣的(我自己开始),我建议你看看一些库,这使得它更容易做http请求。客户端可能需要使用JQuery,服务器端可能需要使用nodejs的请求模块。这两种方式导致比vanilla Javascript更简单的http请求。 – Danmoreng

0

尝试添加“访问控制 - 允许原产地到你的响应头:

这里是说明CORS链接: http://www.html5rocks.com/en/tutorials/cors/

+0

已经试过这一点,但它创造另一个错误:净:: ERR_CONNECTION_RESET – user1722022

+0

你可以发布设置标题的代码吗? –

+0

更新的问题......我现在不拿任何错误有关,但我要么 – user1722022

0

感谢您的更新。你似乎遇到了跨域请求臭名昭著的问题......这是一个安全问题,粗略地讲浏览器将不允许从一个网站的页面加载发出Ajax请求到另一个网站。

换句话说,它关系到你的浏览器如何打开那个发出ajax请求的html。如果页面本身是通过'http://127.0.0.1:8888/index.html'(其中index.html有一些按钮或任何可以发出ajax的内容)获得,那应该没问题。 如果您的最终目的确实是将静态页面部署在进行动态回复的同一个服务器+端口上,那就没问题。如果你的意思是让他们在不同的机器/端口的部署,你可能需要寻找到CORS ...

+0

我的目的是创建本地主机静态页面没有得到警告:8888 /,使动态答复...但是,增加“访问 - 后Control-Allow-Origin'标题给我的回应。我得到的净:: ERR_CONNECTION_RESET错误 – user1722022

+0

只是为了澄清 - 你真的遵循意向,并确保浏览器通过http://127.0.0.1打开你的网页(而不是“localhost”的,因为这不符合您的xhttp.open码)?如果是这样,你不应该需要'允许起源'。允许来源是跨域(=如果你以不同的方式打开你的页面),如果你想跨域,那么它可能需要一些适当的第三方实现,它有时不仅仅是一个头(比如'预检'协商) –

+0

是的,你是对的......在调试时,我意识到如果我使用127.0.0.1,则不需要添加'access-control-allow-origin'标头。顺便说一句,问题是关于if语句。我已经添加了一个答案 – user1722022

相关问题