Windows Azure Node.js SDK

我想知道如何获得使用Windows Azure Node.js SDK的继续令牌? 例如使用SDK我现在做这个来从表中检索数据:

var tableService = azure.createTableService(); tableService.getTable('UsersUserFacebookActions', function (error) { if (error === null) { var query = azure.TableQuery .select() .from('UsersUserFacebookActions') .where('PartitionKey eq ?', userID) .and('Kind eq ?', 'User') .and('Deleted eq ?', 'false'); tableService.queryEntities(query, function (error, userEntities) { if (error === null && userEntities.length > 0) { // check to see if access token needs extending extendAccessToken(userEntities[0], function (user) { callback({ PartitionKey: user.PartitionKey, RowKey: user.RowKey, Kind: user.Kind, EmailAddress: user.EmailAddress, AccessToken: user.AccessToken, TokenExpiration: user.TokenExpiration, JoinDate: user.JoinDate, ChannelCount: user.ChannelCount, FollowCount: user.FollowCount, ChannelCountString: accounting.formatNumber(user.ChannelCount), FollowCountString: accounting.formatNumber(user.FollowCount), Deleted: user.Deleted, DeleteDate: user.DeleteDate }); }); } else callback(); }); } else callback(); }); 

不过,我已经通过包括这个网站的例子和文档来寻找:

https://www.windowsazure.com/en-us/develop/nodejs/

但没有遇到任何提及延续令牌的事情。

任何帮助或build议,将不胜感激。

我不熟悉node.js。 但即使客户端库不支持连续令牌,我们仍然可以手动发出HTTP请求。 http://nodejs.org/api/https.html#https_https_get_options_callback上的文档告诉我们如何从node.js发出HTTP请求,以及http://msdn.microsoft.com/en-us/library/上的文档windowsazure / dd135718告诉我们如何使用HTTP请求使用连续令牌。 将它们结合起来,这个场景就会起作用。 Richard可能会提供更多关于如何使用Windows Azure node.js客户端库的信息,这可能会使这个过程变得更简单。

最好的祝福,

许明

根据源代码(第481行),如果存在连续令牌,则会将“queryEntitiesResultContinuation”属性添加到结果中:

https://github.com/WindowsAzure/azure-sdk-for-node/blob/master/lib/services/table/tableservice.js

这有一个名为“getNextPage”的函数需要回调:

https://github.com/WindowsAzure/azure-sdk-for-node/blob/master/lib/services/table/models/queryentitiesresultcontinuation.js

你可能应该创建一个单独的函数来处理你的查询结果。 这个函数会迭代实体,然后检查是否设置了“queryEntitiesResultContinuation”。 如果是这样,调用函数,传递你的新函数作为回调。

我没有真的尝试过,我找不到任何代码示例!

UPDATE

以下是处理连续令牌的代码示例:

 var tableService = require("azure").createTableService(); function queryWithContinuation(query, cb) { tableService.queryEntities(query, function(error, entities, continuationToken){ if (continuationToken.nextPartitionKey) { nextPage(entities, continuationToken, cb); } else { cb(entities); } }); } // used to recursively retrieve the results function nextPage(entities, continuationToken, cb){ continuationToken.getNextPage(function(error, results, newContinuationToken){ entities = entities.concat(results); if (newContinuationToken.nextPartitionKey){ nextPage(entities, newContinuationToken, cb); } else { cb(entities); } }); } // example usage var query = azure.TableQuery.select().from('really-big-table'); queryWithContinuation(query, function(results){ console.log(results); }); 

如果用于任何我已经写过帮助模块来遍历连续令牌的人。

https://github.com/freakyfriday/azure-storage-extension

 //Usage //create azure table service var tableService = azure.createTableService("AZURE_STORAGE_ACCOUNT","AZURE_STORAGE_ACCESS_KEY"); //query var myQuery = new azure.TableQuery().where(whereClause); //get data automatically retrieving data where there is a continuation token tableService.queryEntitiesContinuation('Table', myQuery, null, function (error, result) { var allResults = result.entries; }); //module (place in separate file) var azure = require('azure-storage'); azure.TableService.prototype.queryEntitiesContinuation = function (tableName, query, maxContinuationCount, callback) { var tableService = this; var data = new Array(); var countinuationCount = 0; var operation = function (tableName, query, continuationToken) { tableService.queryEntities(tableName, query, continuationToken, function (error, result) { if (!error) { if (result.continuationToken) { result.entries.forEach(function (entry) { data.push(entry); }); if (maxContinuationCount === null || countinuationCount < maxContinuationCount) { ++countinuationCount; //update top if (query._top !== null) { query._top = query._top - data.length; if (query._top !== 0) { operation(tableName, query, result.continuationToken); } else { callback(error, result); } } else { operation(tableName, query, result.continuationToken); } } else { callback(error, result); } } else { data.forEach(function (entry) { result.entries.push(entry) }); callback(error, result); } } else { result.entries.push(data); callback(error, result); } }); }; operation(tableName, query, null); }; module.exports = azure;