上一篇文章所有請求只能呼叫index.html,現在做個改造,允許呼叫自定義頁面
服務端 app.js
var app = require('http').createServer(handler) var io = require('socket.io')(app); var fs = require('fs'); var url = require("url"); app.listen(80); function handler (req, res) { fs.readFile(__dirname + url.parse(req.url).pathname, 'utf-8', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading ' + url.parse(req.url).pathname); } res.writeHead(200); res.end(data); }); } io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); });
說明:首先使用var url = require("url");載入url模組,然後使用url.parse(req.url).pathname呼叫自定義頁面
客戶端 demo1.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>demo</title> </head> <body> <script src="/socket.io/socket.io.js"></script> <script src="jquery-2.1.1.js"></script> <script> var socket = io('http://localhost'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); $(document).ready(function(){ alert("document ready!"); }); </script> </body> </html>
說明:這個載入了一個jquery的庫,如果不能呼叫自定義頁面,按之前程式碼的寫法,所有請求都會載入index.html頁面的內容