0

node.js と jQuery を使用して単純なチャット アプリケーションを作成しようとしていますが、コンソールに「$ が定義されていません」というエラーが表示されます。私は、authrが問題なくjqueryを使用しているチュートリアルに従っています。

私の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」コードにあると確信しています。

4

3 に答える 3

1

静的ファイルを提供しているのは誰ですか? あなたが持っているコードから、あなたが提供している唯一の静的ファイルは HTML ページのようです。

特定の場所にあるすべての静的ファイルを処理するには、コードを追加する必要があります。基本的に、内のすべての静的ファイルを処理する必要があります

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

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

于 2012-08-08T16:58:43.967 に答える
1

問題は、サーバーから jquery-1.7.2.min.js を提供していないため、Web ページが jquery をロードしていないため、$. まず、ホストされている jquery を参照してみて、問題が解決するかどうかを確認してください。

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

あなたの問題に完全に関連しているわけではありませんが、公開 Web サイトを構築している場合、ホストされた jquery (および他のライブラリ) を参照することをお勧めします。同じこと)。これに関する合理的な説明については、http://encosia.com/3-reasons-why-you-should-let-google-host-jquery-for-you/を参照してください。

ただし、通常は、独自の css や js、画像などの静的ファイルを提供する必要があります。ノードでこの手書き入力を行う方法を説明する投稿たくさんありますが、次のような専用モジュールを見たいと思うかもしれません: https://github.com/cloudhead/node-static

于 2012-08-08T17:01:24.500 に答える
1

サーバー側では、使用しているコードが非常に古いです。sys.pumpは、少なくとも 1 年以上非推奨となっています。

socket.ioの例を読むことをお勧めします。例にはたまたまチャットサーバーもあります。

于 2012-08-08T16:56:49.057 に答える