0、知识点
- socket.io
- express
- 智能机器人聊天
1、app.js
/**
* Created by Administrator on 2017/10/27 0027.
*/
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
});
})
})
});
2、db.js
/**
* Created by Administrator on 2017/10/23 0023.
*/
//封装操作数据库的方法
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)
})
})
}
3、config.js
/**
* Created by Administrator on 2017/10/23 0023.
*/
var dbUrl = 'mongodb://localhost:27017/koa';
module.exports={
dbUrl:dbUrl
}
4、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>