2012-08-08 72 views
0

我试图用node.js和jQuery创建一个简单的聊天应用程序,但在控制台中出现''未定义'的错误信息。我正在遵循authr在使用jquery时没有问题的教程。在Node.js中处理.js和.css

我chat.js(服务器):

var http = require('http'), 
sys = require('sys'), 
fs = require('fs'), 
ws = require('./ws.js'); 


var clients = []; 
http.createServer(function(req,res){ 
    res.writeHead(200,{ 
     'Content-Type': 'text/html' 
    }); 
    var rs = fs.createReadStream(__dirname + '/test.html'); 
    sys.pump(rs, res); 
}).listen(4000); 

    ws.createServer(function(websocket){ 

    websocket.on('connect', function(resource){ 
     clients.push(websockets); 
     websocket.write('Welcome'); 
    }); 

    websocket.on('data', function(data){ 
     clients.forEach(function(client){ 
      client.write(data); 
     }); 
    }); 

    websocket.on('close',function(){ 
     var pos = clients.indexOf(websocket); 
     if(pos >= 0){ 
      clients.splice(pos, 1); 
     } 
    }); 
}).listen(8081); 

的test.html(客户端):

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
<script type="text/javascript" src="jquery-1.7.2.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(e) { 
     ws = new WebSocket("ws://localhost:8080"); 
     ws.onmessage = function(event){ 
      var data = data.replace(/&/g, "&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"); 

      $('#log ul').append('<li>' + data + '</li>'); 
      } 
    }); 
</script> 
</head> 

<body> 
<div id="log"><ul></ul></div> 
    <div id="console"> 
    <input type="text" id="entry"/> 
    </div> 
    </div> 

</body> 
</html> 

我得到的错误之前,我去掉了所有的CSS等。 js src所以我很确定问题出在服务器中的'Content-Type'代码。

回答

1

我怀疑的问题是,你是不是从你的服务器服务jQuery的1.7.2.min.js,所以网页不加载jquery,因此没有$。首先,尝试引用托管的jquery,看看是否解决了你的问题。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> 

虽然不能完全对你的问题相关的,如果你正在建设一个公共网站,那么它通常是引用托管的jQuery(和其它库)为您的用户将可能有一个本地缓存的副本已经是一个不错的主意(感谢其他网站做了同样的事情)。有关这方面的合理解释,请参阅http://encosia.com/3-reasons-why-you-should-let-google-host-jquery-for-you/

但是,一般来说,您将要为某些静态文件提供服务:您自己的CSS和js,图像等。有 - plenty - of - posts - 介绍如何做到这一点手写与节点,但你可能想看看的专用模块是这样的:https://github.com/cloudhead/node-static

+0

这解决了$错误,但感谢你的其他评论,以及我将研究这更多 – RapsFan1981 2012-08-08 17:16:14

+0

这解决了'jQuery'问题,但没有解决也谈论CSS文件的问题。这是一种避免在本地提供静态文件的解决方法,如果您的页面上有自定义CSS,则无法工作。 – 2012-08-08 17:28:50

+0

是的,但问题并没有问服务的css文件(提问者刚才提到他们删除了css refs作为调试的一部分)。此外,现在他们知道这个问题与服务静态资源有关,他们可以自己解决其他问题。谷歌搜索可能很快找到他们这个链接:http://www.sitepoint.com/serving-static-files-with-node-js/ – Tom 2012-08-08 17:53:16

1

在服务器端,您使用的代码非常旧。 sys.pump已被弃用至少一年以上。

我建议你阅读socket.io的例子。在例子中碰巧有一个chat server

1

谁在为您的静态文件提供服务?从你所拥有的代码看来,你所服务的唯一静态文件就是HTML页面。

您需要添加一些代码来处理特定位置的所有静态文件。基本上,你需要处理中的所有静态文件的

http.createServer(function() {...}) 

参见:http://www.sitepoint.com/serving-static-files-with-node-js/