zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    并发编程学习笔记(二十九、Unsafe)
    并发编程学习笔记(二十八、ConcurrentHashMap,Java8 ConcurrentHashMap)
    并发编程学习笔记(二十七、ConcurrentHashMap,Java7 ConcurrentHashMap)
    并发编程学习笔记(二十六、ConcurrentHashMap,Java8 HashMap简述)
    位运算符
    并发编程学习笔记(二十五、ConcurrentHashMap,Java7 HashMap简述)
    并发编程学习笔记(二十四、AQS总结)
    并发编程学习笔记(二十三、CopyOnWriteArrayList源码分析)
    我二十多岁了,至今依然一事无成
    从零开始手写 mybatis(一)MVP 版本
  • 原文地址:https://www.cnblogs.com/loaderman/p/11581599.html
Copyright © 2011-2022 走看看