1

我正在使用 Windows Azure 移动服务自定义 API 和适用于 Node.js 的 Windows Azure SDK。

azure我有一个从导入模块开始的简单脚本。

var azure = require('azure');
var tableService = azure.createTableService();

为了响应我的自定义 API 的帖子,我想在 Azure 表存储(不是Azure Sql 数据库)中插入一个具有少量属性的实体,其中一个是时间戳(的实例Date)。

    var entity = {
      PartitionKey: partitionKey
      RowKey: rowKey,
      Time: new Date()
    };

    tableService.insertOrReplaceEntity(tableName, entity, callback);

结果是Time属性与实体一起存储为字符串而不是日期。例如,该Time属性将存储为字符串Mon Aug 12 2013 20:32:51 GMT+0000 (Coordinated Universal Time)。我通过从 Visual Studio 中的服务器资源管理器加载表并检查插入实体的详细信息来确认这一点。

我知道您可以将日期存储在 Azure 表存储中,我已经从 C# 中完成了这项工作。但是,上述方法不起作用,我想不出一个更规范的示例来使用我用 Javascript 编写的自定义 API 进行测试。

另请参阅如何使用 Node.js 中的表服务,其中显示了类似的示例。

那么如何使用 Azure Node.js SDK 存储具有预期数据类型的日期属性呢?

4

1 回答 1

1

此示例使用 WCF DateTime数据类型保存Time属性。使用此代码:

var azure = require('azure');
var tableService = azure.createTableService(accountName, accountKey, host);

tableService.createTableIfNotExists('testtable', function(error){
  if(!error){
    var item = {PartitionKey: "Things"
                , RowKey: "123"
                , name: "Thing to add"
                , category: "Test"
                , time: new Date()};
    tableService.insertOrReplaceEntity('testtable', item, function(error){
      if(!error){
        console.log('Item inserted');
        tableService.queryEntity('testtable'
          , 'Things'
          , '123'
          , function(error, entity){
              if(!error){
                  console.log(entity);
              }
          });
      }
    });
  }
});

如果我运行此代码,我会得到:

Done
Item inserted
{ _:
   { 'xml:base': 'https://XXXXXX.table.core.windows.net/',
     xmlns: 'http://www.w3.org/2005/Atom',
     'xmlns:d': 'http://schemas.microsoft.com/ado/2007/08/dataservices',
     'xmlns:m': 'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata',
     etag: 'W/"datetime\'2013-12-12T16%3A11%3A38.118877Z\'"',
     ContentRootElement: 'm:properties',
     id: 'https://XXXXXX.table.core.windows.net/testtable(PartitionKey=\'Things\',RowKey=\'123\')',
     category: { '$': [Object] },
     link: 'testtable(PartitionKey=\'Things\',RowKey=\'123\')',
     title: '',
     updated: '2013-12-12T16:11:38Z',
     author: { name: '' } },
  PartitionKey: 'Things',
  RowKey: '123',
  Timestamp: Thu Dec 12 2013 16:11:38 GMT+0000 (GMT Standard Time),
  category: 'Test',
  name: 'Thing to add',
  time: Thu Dec 12 2013 16:11:38 GMT+0000 (GMT Standard Time) }

这显示了 DateTime 值而不是时间字段的字符串。它还在 Visual Studio 表存储查看器/编辑器中显示为 DateTime 字段。

如果我使用 C# 代码查询同一个表,我还会得到时间字段的 C# DateTime值。

于 2013-09-03T13:10:53.457 回答