在Azure表格存储的插入功能中查询其他表格

问题描述:

一旦插入新项目,我正在使用Azure表格存储发送推送通知。目前我正试图查询第二个表来检索我想用于推送通知的字符串。在Azure表格存储的插入功能中查询其他表格

我对Node.js非常陌生,所以我通过一些代码并试图通过以下方法在TestTable上启动一个查询,以查找基于TestProperty的正确实体。一旦我找到了正确的实体,我想使用它的特定属性来处理。

这是错误我与我当前的代码获得:

TypeError: Cannot read property 'table' of undefined 

我的代码部分,我尝试查询第二表

var azureMobileApps = require('azure-mobile-apps'), 
tables = require('azure-mobile-apps/src/express/tables'), 
queries = require('azure-mobile-apps/src/query'), 
logger = require('azure-mobile-apps/src/logger'); 

var table = azureMobileApps.table(); 

table.insert(function (context) { 
    logger.info('Running TestTable1.insert'); 
    var testTable = azureMobileApps.tables.table('TestTable2'); 
    var query = queries.create('TestTable2').where({ TestProperty : context.item.testproperty }); 

    return context.execute() 
     .then(function (results) { 
     ..... 

随着Azure的表存储是一种服务,商店在云中非结构化的NoSQL数据,你可以参考https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/以获得更多。

但是,azure-mobile-apps-node sdk中的tables模块包含将表添加到Azure移动应用程序的功能。它会返回一个路由器,该路由器可以连接到一个快速应用程序,并附带一些用于注册表的附加功能哪些实际上利用Azure SQL(Azure上的SQL Server数据库服务)。

根据你的代码片段,你似乎正在实施第二个概念。

根据您的描述,如果我没有误解,您想在EasyTables脚本中查询table2table1操作。

我们可以利用“使用()”定制中间件来指定中间件,以针对表中的每个请求执行中间件,作为对azure-mobile-apps sdk文档的描述,其格式为http://azure.github.io/azure-mobile-apps-node/module-azure-mobile-apps_express_tables_table.html#~use

E.G.

var queries = require('azure-mobile-apps/src/query'); 
var insertMiddleware = function(req,res,next){ 
    var table = req.azureMobile.tables('table2'), 
    query = queries.create('table2') 
      .where({ TestProperty : req.body.testproperty }); 
    table.read(query).then(function(results) { 
     if(results){ 
      req.someStoreData = somehander(results); //some hander operations here to get what you want to store and will use in next step 
      next(); 
     }else{ 
      res.send("no data"); 
     } 
    }); 
}; 

table.insert.use(insertMiddleware, table.operation); 
table.insert(function (context) { 
    console.log(context.req.someStoreData); 
    return context.execute(); 
}); 

此外,如果您需要推EasyTables脚本通知,您可以参考在Github上的样品在https://github.com/Azure/azure-mobile-apps-node/blob/master/samples/push-on-insert/tables/TodoItem.js

+0

谢谢你的答案 - 它让我了解了更多的后端。我还有一个问题。当我使用table.insert.use(insertMiddleware)时,我没有可以访问插入项目的上下文变量。你能帮助我吗? – nor0x

+0

中间件将在表操作之前运行,并且中间件接受3个参数'request','response','next',您可以参考http://expressjs.com/zh/guide/writing-middleware.html更多。顺便说一下,为了我的道歉,我在代码片段中做了一个错误,应该有一个'context',如果我们想要获取变量,我们可以使用一些中间件,比如'body-parser',参考http:// expressjs .com/en/resources/middleware.html更多 –

+0

你是非常有帮助的 - 我开始理解我可以如何使用它。还有一件事你可以帮助我!我现在在结果变量中获得所需的值(似乎是一个数组)。我可以将结果变量的一个值存储在全局变量中,以便稍后在主表table.insert函数中使用它?谢谢 – nor0x