上一篇文章所有请求只能调用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页面的内容