Aak*_*Kag 5 node.js botframework
我正在使用Node js构建聊天机器人。
我目前正在将会话数据存储到Microsoft默认存储中,每个用户会话的限制为64K。我想使用自己的存储设备来存储会话数据。这是我从Microsoft开发人员那里获得的帮助。
我能够存储在文档数据库和Azure表中。
不过,我还是很困惑。我们将如何实现IStorageClient存储在自己的数据库中的接口?
无论何时设置,session.UserData.name=""它都应存储在自己的数据库中。
我编写了代码将机器人数据存储到 Mongo Db 中。完整的代码和详细信息可以在BotBuilder-MongoDB中找到
IstorageClient接口实现代码:
"use strict";
var Consts = require('./Consts');
var mongodb_1 = require("mongodb");
var replaceDot_Atrate = require("./replaceDot");
var mongoDbConnection = require('./connection.js');
var conf = require('../config');
var conversational_collname = conf.db.conversationalCollection;
var IStorageClient = (function () {
function IStorageClient(options) {
this.options = options;
}
IStorageClient.prototype.retrieve = function (partitionKey, rowKey, callback) {
var id = partitionKey + ',' + rowKey;
if(rowKey!=="userData"){
var query={"$and":[{"userid":id}]}
mongoDbConnection(function(err,db) {
var iterator= db.collection(conversational_collname).find(query);
iterator.toArray(function (error, result, responseHeaders) {
if (error) {
console.log("Error",error)
callback(error, null, null);
}
else if (result.length == 0) {
callback(null, null, null);
}
else {
var document_1 = result[0];
var finaldoc=replaceDot_Atrate.substituteKeyDeep(document_1, /\@/g, '.');
finaldoc["id"]=id
callback(null, finaldoc, null);
}
});
});
}
else{
var query={"$and":[{"userid":partitionKey}]}
mongoDbConnection(function(err,db) {
var iterator= db.collection(conversational_collname).find(query);
iterator.toArray(function (error, result, responseHeaders) {
if (error) {
callback(error, null, null);
}
else if (result.length == 0) {
//console.log("result length 0")
callback(null, null, null);
}
else {
var document_1 = result[0];
callback(null, document_1, null);
}
});
});
}
};
IStorageClient.prototype.initialize = function (callback) {
var _this = this;
var client=mongodb_1.MongoClient;
this.client = client;
mongoDbConnection(function(err,database) {
_this.database = database;
_this.collection = database.collection(conversational_collname);
callback(null);
});
};
IStorageClient.prototype.insertOrReplace = function (partitionKey, rowKey, entity, isCompressed, callback) {
var id=partitionKey + ',' + rowKey
var docDbEntity = { id: partitionKey + ',' + rowKey, data: entity, isCompressed: isCompressed };
if(rowKey!=="userData"){
var newEntitiy=replaceDot_Atrate.substituteKeyDeep(entity, /\./g, '@');
var conditions1 = {
'userid': id
};
var updateobj1 = {
"$set": {"data":newEntitiy,"isCompressed":false}
};
mongoDbConnection(function(error,db) {
db.collection(conversational_collname).update(conditions1,updateobj1,{upsert: true},function(err,res){
callback(error, null,"");
});
});
}
else{
var conditions = {
'userid': partitionKey
};
var update = {
"$set": {"data":entity}
}
mongoDbConnection(function(error,db) {
db.collection(conversational_collname).update(conditions,update,{upsert: true},function(err,res){
callback(error, null,"");
})
});
}
};
IStorageClient.getError = function (error) {
if (!error)
return null;
return new Error('Error Code: ' + error.code + ' Error Body: ' + error.body);
};
return IStorageClient;
}());
exports.IStorageClient = IStorageClient;
Run Code Online (Sandbox Code Playgroud)