Sockete.io教程:ExpressとMongodbに基づくスマートカスタマーサービスのシンプルな設計と実現
インテリジェントカスタマーサービスの簡単な設計概要ユーザクエリーインターフェース ユーザは注文番号 などのテキストを入力します.サーバは、あいまいなクエリを介して、対応する注文情報 を返す.知能であれば、AI関連サービスもあるはずです.例えば、各種シーンと話術、関連模型訓練 ここではsoket.io関連機能だけを体現しています.AI関連の実現 は関係ありません.
バックエンドのデザイン
データベースのパッケージと構成
module/config.js
view/index.ejs
バックエンドのデザイン
データベースのパッケージと構成
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>