从Node.js中的Azure表存储返回原始实体

时间:2017-01-04 20:31:51

标签: node.js azure odata azure-table-storage

我的JavaScript对象/实体如下所示:

{
  id: 1,
  name: 'foo',
  timestamp: new Date()
}

我需要传递给Azure TableService的实体看起来像这样:

{
  id: { '_': 1, '$': 'Edm.Int32' },
  name: { '_': 'foo', '$': 'Edm.String' },
  timestamp:{ '_': new Date(), '$': 'Edm.DateTime' },
}

使用entityGenerator可以轻松完成此操作,这也是从TableService返回实体的格式。

是否可以在表fetching data时从TableService返回原始值? 我并不需要在我的JavaScript对象上使用所有这些OData types and metadata

我可能需要使用像PropertyResolver这样的东西,但文档很混乱。

2 个答案:

答案 0 :(得分:5)

如何使用options参数进行尝试?

tableService.retrieveEntity(tableName, partitionKey, rowKey, {payloadFormat:"application/json;odata=nometadata"}, function(error, result, response) {});

它也可以用于查询:

tableService.queryEntities(tableName, query, null,{payloadFormat:"application/json;odata=nometadata"}, function(error,result, response) {});

为了获得更清洁的json,您可以response.body代替result

示例:

tableService.retrieveEntity(tableName, partitionKey, rowKey, {payloadFormat:"application/json;odata=nometadata"}, function(error, result, response) {
        if (!error)
        {
            var myEntity = response.body;
        }
});

答案 1 :(得分:3)

您可以使用entityResolver来实现此目标。

示例:

var entityResolver = function(entity) {
    var resolvedEntity = {};

    for(key in entity) {
        resolvedEntity[key] = entity[key]._;
    }
    return resolvedEntity;
}

var options = {};
options.entityResolver = entityResolver;

tableSvc.retrieveEntity('mytable', 'hometasks', '1', options, function(error, result, response) {

    if(!error) {
        console.log('result: ', result);
    }
});