express结合Socket.io 跨域实现聊天以及Socket.io结合数据库实现智能机器人
app.js
var express=require('express'); var app=express(); var DB=require('./module/db.js'); /*第一步*/ var server = require('http').Server(app); var io = require('socket.io')(server); app.set('view engine','ejs'); app.use(express.static('public')); app.get('/',function(req,res){ //res.send('首页'); res.render('index'); }) app.get('/news',function(req,res){ res.send('news'); }) //2.监听端口 server.listen(8000,'192.168.0.3'); /*改ip*/ //3、写socket的代码 io.on('connection', function (socket) { console.log('建立链接') socket.on('message',function(data){ console.log(data) //socket.emit('servermessage',msg); var msg=data.msg||''; /*获取客户端的数据*/ //去服务器查询数据 DB.find('article',{'title':{$regex:new RegExp(msg)}},{'title':1},function(err,data){ console.log(data); socket.emit('servermessage',{ result:data }); }) }) });
config.js
var dbUrl = 'mongodb://localhost:27017/koa'; module.exports={ dbUrl:dbUrl }
db.js
//封装操作数据库的方法 var config=require('./config.js'); var MongoClient=require('mongodb').MongoClient; var ObjectID = require('mongodb').ObjectID; /*查找_id*/ var dbUrl =config.dbUrl; //封装连接数据库的方法 function _connect(callback){ MongoClient.connect(dbUrl,function(err,db){ if(err){ console.log('数据库连接失败'); console.log(err); return; } callback(db); }) } exports.ObjectID=ObjectID; /* db.find('user',{},function(err,data){ console.log(data) }) * */ /* * json1 条件 * json2 列数 * json3 配置信息 * */ exports.find=function(collectionName,json1,json2,json3,callback){ if(arguments.length==3){ var cb=json2; var col={}; /*查询的列*/ var skip=0; var limit=0; }else if(arguments.length==4){ var cb=json3; var col=json2; /*查询的列*/ var skip=0; var limit=0; }else if(arguments.length==5){ var cb=callback; var col=json2; /*查询的列*/ //json3={ // page, // pageSize //} var limit=json3.pageSize || 10; /*如果pageSize 每页10条*/ var skip=json3.page? (json3.page-1)*limit : 0; /*page每页传显示第一页*/ }else{ console.log('传入参数错误'); return; } _connect(function(db){ var result=db.collection(collectionName).find(json1,col).skip(skip).limit(limit); result.toArray(function(err,data){ db.close(); cb(err,data); }) }) } /* db.insert("user",{"name":"zhangsan"},function(){ }) 增加数据 * */ exports.insert=function(collectionName,json,callback){ _connect(function(db){ db.collection(collectionName).insertOne(json,function(err,result){ db.close(); callback(err,result); }) }) } /* db.update('user',{"id":123},{'name':"zhangsan"},function(){ }) 更新数据 * * */ exports.update=function(collectionName,json1,json2,callback){ _connect(function(db){ db.collection(collectionName).updateOne(json1,{ $set:json2 },function(err,result){ db.close(); callback(err,result); }) }) } //封装删除的方法 exports.remove=function(collectionName,json,callback){ _connect(function(db){ db.collection(collectionName).removeOne(json,function(err,result){ db.close(); callback(err,result); }) }) } exports.count=function(collectionName,json,callback){ _connect(function(db){ db.collection(collectionName).count(json,function(err,data){ callback(err,data) }) }) }
index.ejs
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <script src="/jquery-1.11.3.min.js"></script> <script src="http://192.168.0.3:8000/socket.io/socket.io.js"></script> <style> .box{ width: 300px; height: 400px; margin: 0 auto; border: 1px solid #666; margin-top:20px; } .list{ width: 300px; height: 360px; overflow-y: auto; } .message{ height: 40px; line-height: 44px; display: flex; } .message input{ border: 1px solid #666; } .message input[type='text']{ flex: 1; height: 38px; } .message input[type='button']{ width: 100px; height: 40px; border: 1px solid #666; } </style> </head> <body> <div class="box"> <div class="list"> <div id="list"> </div> <div class="footer" id="footer"> </div> </div> <div class="message"> <input type="text" id="msg" /> <input type="button" id="send" value="发送"/> </div> </div> </body> </html> <script> $(function(){ var socket = io.connect('http://192.168.0.3:8000/'); socket.on('servermessage',function(data){ if(data.result.length) { var str='<ul>'; for(var i=0;i<data.result.length;i++){ str+='<li>'+data.result[i].title+'</li>'; } str+='</ul>'; }else{ var str='<p>没有找到您要的数据,请联系人工客服</p>' } $('#list').append(str); $('#footer').get(0).scrollIntoView(); }) var username='zhangsan'+Math.floor(Math.random()*10); //群聊功能--聊天室 $('#send').click(function(){ var msg=$('#msg').val(); socket.emit('message',{ 'username':username, 'msg':msg }); $('#list').append(`<p><strong>${username}:</strong> ${msg}</p>`); $('#msg').val(); }) }) </script>
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!