node.js - 访问 AzureBotStorage 中的所有用户数据
问题描述
我使用适用于 Node.js 的 Bot Builder SDK 创建了一个聊天机器人。由于这将托管在 Azure 上,因此我botbuilder-azure
在托管环境中使用 AzureBotStorage(模块),botbuilder
在开发中使用 MemoryBotStorage(模块)。
初始化类似于:
var builder = require('botbuilder');
var azure = require('botbuilder-azure');
var stateStorage = {};
if (process.env.ENVIRONMENT != "DEV") {
var azureTableClient = new azure.AzureTableClient(process.env.TABLE_NAME, process.env.ACCOUNT_NAME, process.env.ACCOUNT_KEY);
stateStorage = new azure.AzureBotStorage({ gzipData: false }, azureTableClient);
} else {
stateStorage = new builder.MemoryBotStorage();
}
这通常很好用——我已经确认(使用存储资源管理器工具)用户对话数据存储在本地和托管环境中。
问题是,我在访问应用程序中的所述存储数据时遇到了问题(我试图作为单独函数的一部分遍历所有用户)。
像这样的东西:
for (userId in stateStorage.userStore)
非常适合访问本地环境存储 ( builder.MemoryBotStorage()
),但对于托管环境存储 ( ) 根本不起作用azure.AzureBotStorage()
。事实上,我只是找不到访问/查询 AzureBotStorage 数据的方法。
有没有人有访问 AzureBotStorage 数据的经验,如果有,您建议如何遍历所有用户?
谢谢!
解决方案
我找到了一种使用 访问表的方法buildTableService().queryEntities()
,如下所示:
azureTableClient.buildTableService().queryEntities(process.env.TABLE_NAME, null, null, function (error, result, response) {
for (var i=0; i<result.entries.length; i++) {
\\ do stuff with result.entries[i]
}
});
但是,这种方法不是特别干净或有效,所以我暂时不回答这个问题,以防有人有更好的方法。
推荐阅读
- react-native - react-native 中的 flow 和 eslint 有什么区别?我应该使用哪一个?我可以同时使用吗?
- reactjs - MobX React 不重新渲染
- c++ - 在这种情况下,有没有办法用一个解决方案替换两个仅在类型上不同的相似功能?
- c++ - 我的 for 循环后的代码不起作用,for 循环后的打印语句不会被打印
- javascript - 在 CodeIgniter 中,如何在特定的 div 元素中显示视图页面
- ruby - 我如何错误地使用 read_string?
- c# - 如何将 asp.net core docker 容器暴露给公共 url?
- html - WordPress:定义单行表格列宽的代码
- elasticsearch - 如何将所有字段的弹性搜索索引映射设置为 not_analysed
- javascript - 在用户单击导航链接之前,如何将导航栏项目默认设置为活动状态?