此博客主要是为了随笔记录express中集成应用socket.io的知识点,如有缺点或者更好的建议,希望大家能够提出来。
————————————————————————————————————————————————————————
1.为了快速搭建express的web应用。首先利用express的生成器生成项目目录(可详见w3c的express文档)。
2.使用npm install socket.io --save 安装依赖
3.在app.js中引入socketIo
var io = require('socket.io')();
io.set('origins', '*:*'); // 解决跨域问题
然后在文件最下面写入app.io = io;
4.在bin/www下面(这是能够在express应用socket.io的关键)
var io = app.io; io.attach(server);
5.在项目下新建socket文件夹,创建socketIo.js(将socketJS封装)
var socketio = function(io) { io.on('connection', function (socket) { console.log('连接成功:' + socket.id) } module.exports = socketio
6.最后在app.js中可以引入socketIo.js,将3步骤的io传入,即可。
var socketIo = require('./socket/socketIo')(io);
拓展---------------------------------------------------------------------------------------------------------------
1.如果我们需要在router中使用io怎么办呢?其实很简单。在app.js中
var indexRouter = require('./routes/index')(io);将io传入即可。index.js的改动如下:
var returnAdminRouter = function(io) { /* GET home page. */ router.get('/qrcode', function(req, res, next) { return router; } module.exports = returnAdminRouter;
2.有同学想区分不同的开发环境如何配置?其实很简单。
2.1 首先在项目下,新建config文件夹,里面新建四个文件,分别为,config.js(读取环境配置信息),develop.js,test.js,prod.js(都是配置信息)
/** * 统一配置入口 config.js **/ var development=require('./development'); var production=require('./production'); var test=require('./test'); /** * 判断当前指示当前环境的常量返回对应配置 * 默认返回开发环境的配置 */ function config(){ switch(process.env.NODE_ENV){ case 'development':return development;break; case 'production':return production;break; case 'test':return test;break; default:return development; } } module.exports=config();
/** * 环境配置入口 develop.js **/
var config = { env: 'development', //环境名称 port: 3002, mysql_config: { host: '127.0.0.1', username: 'root', password: 'root', database:'mysql', port: 3306 } }; module.exports=config;
2.2 在package.json中配置:
"scripts": { "start": "set NODE_ENV=production&&node ./bin/www",
"test": "set NODE_ENV=test&&node ./bin/www",
"dev": "set NODE_ENV=development&&nodemon ./bin/www" },
2.3 在bin/www文件里面替换代码,如下
var config = require('../config/config') console.log('当前系统运行环境为:' + config.env + ' 端口为:' + config.port) var port = normalizePort(config.port || '3000');
这样运行不同环境脚本就可以咯