私はsocket.ioが初めてで、すでに問題を抱えています。マイナーだと思います。node.js を適切にインストールし、socket.io も npm でインストールしました。次に、テストのために、socket.io からコードのサンプルをカット アンド ペーストすると、すべてがうまく機能します。ここで、コードとフォルダーを構造化したいので、フォルダー「クライアント」を作成して、例のクライアントコードを含む新しいjsファイルclient.jsを配置しました。これが私のアーキテクチャです
/client
client.js
index.html
server.js
client.js :
var socket = io.connect('http://localhost:80');
socket.on('news', function (data) {
alert('sqd');
console.log(data);
socket.emit('my other event', { my: 'data' });
});
サーバー.js
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(80);
function handler (req, res) {
fs.readFile(__dirname + '/index.html', 'utf-8',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html ' + __dirname);
}
res.writeHead(200, {'Content-Type' : 'text/html'});
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
index.html
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<script type="text/javascript" src="/client/client.js"></script>
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
</head>
<body>
</body>
</html>
localhost:80 でブラウザを更新すると、client.js にエラーが表示されます。
Uncaught SyntaxError: Unexpected token <
Resource interpreted as Script but transferred with MIME type text/html
私の js ファイルを js ファイルとして解釈するのに問題があるようです。質問に関するいくつかのスレッドを読みましたが、何も機能しません。
私を助けてくれませんか?
ありがとう:)
わかりました解決策を見つけました... 静的 Web サーバーでファイル要求ごとにコンテンツ タイプを指定する必要があります。誰かを助けることができるかもしれません。ハンドラー関数は次のとおりです。
function handler (req, res) {
var filePath = req.url;
if (filePath == '/') {
filePath = './client/index.html';
} else {
filePath = './client/lib' + req.url;
}
var extname = path.extname(filePath);
var contentType = 'text/html';
switch (extname) {
case '.js':
contentType = 'text/javascript';
break;
case '.css':
contentType = 'text/css';
break;
}
path.exists(filePath, function(exists) {
if (exists) {
fs.readFile(filePath, function(error, content) {
if (error) {
res.writeHead(500);
res.end();
}
else {
res.writeHead(200, { 'Content-Type': contentType });
res.end(content, 'utf-8');
}
});
}
else {
res.writeHead(404);
res.end();
}
});
}
これが誰かを助けることを願っています。私は問題を投稿し、助けを借りずに自分で対応するのが大好きです。どういうわけか、私はあまりにも速く必死になっていることを意味します. そして、私も投稿で自分の人生を語るのが大好きです:) OK、何か食べて、コーヒーをもっと飲むつもりです!!!