Sockete.io教程:ExpressとMongodbに基づくスマートカスタマーサービスのシンプルな設計と実現


インテリジェントカスタマーサービスの簡単な設計概要
  • ユーザクエリーインターフェース
  • ユーザは注文番号
  • などのテキストを入力します.
  • サーバは、あいまいなクエリを介して、対応する注文情報
  • を返す.
  • 知能であれば、AI関連サービスもあるはずです.例えば、各種シーンと話術、関連模型訓練
  • ここではsoket.io関連機能だけを体現しています.AI関連の実現
  • は関係ありません.
    バックエンドのデザイン
    データベースのパッケージと構成
    module/config.js
    var dbUrl = 'mongodb://localhost:27017/your-db-name'; //              url
    
    module.exports={
        dbUrl:dbUrl
    }
    
    module/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;
    
    /*
    * 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":"user_number"},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':"user_number"},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)
            })
        })
    }
    
    バックエンドプログラムの設計
    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');
    })
    
    server.listen(3000,'127.0.0.1');
    
    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
                });
            })
        })
    });
    
    フロントエンドデザイン
    view/index.ejs
    <script src="/jquery-1.11.3.min.js">script>
    <script src="http://127.0.0.1:3000/socket.io/socket.io.js">script>
        
    <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>
    
    <script>
        $(function(){
            var socket = io.connect('http://127.0.0.1:3000/');
            socket.on('servermessage',function(data){
                if(data.result.length) {
                    var str='
      '
    ; for(var i=0;i<data.result.length;i++){ str+='
  • '
  • +data.result[i].title+''; } str+=''; }else{ var str='

    '
    } $('#list').append(str); $('#footer').get(0).scrollIntoView(); }) var username = 'user_number' + Math.floor(Math.random()*10); // -- $('#send').click(function(){ var msg = $('#msg').val(); socket.emit('message',{ 'username':username, 'msg':msg }); $('#list').append(`

    ${username}: ${msg}`
    ); $('#msg').val(); }) })
    script>