【问题标题】:Adding an Entity to an Azure Cosmos Table with Javascript Azure Function使用 Javascript Azure 函数将实体添加到 Azure Cosmos 表
【发布时间】:2019-07-31 23:03:27
【问题描述】:

在 Azure 中,我有一个 javascript HTTPTrigger 函数应用程序:

const azure = require('azure-storage')
const tableSvc = azure.createTableService(
    process.env.COSMOS_TABLE_ACCOUNT,
    process.env.COSMOS_TABLE_KEY,
    process.env.COSMOS_TABLE_ENDPOINT
)
const entGen = azure.TableUtilities.entityGenerator
const testData = {
    PartitionKey: entGen.String('test'),
    RowKey: entGen.String(1),
    name: entGen.String('It works!')
}

const insertTestData = () => new Promise((resolve, reject) => {
    tableSvc.insertEntity('tests', testData, (error, res) => {
        if (error) return reject(error)
        resolve(res)
    })
})
...

我已确认环境变量已全部设置并使用 Azure Cosmos DB -> Cosmos 表实例 -> 连接字符串中的值填充。

我也尝试过连接:

const tableSvc = azure.createTableService(
    process.env.COSMOS_TABLE_CONNECTION_STRING
)

当我调用insertTestData() 时,我从.insertEntity 回调中返回一个带有空对象的错误:{}。没有实体被添加到我的 tests 表中,数据浏览器已确认。

任何想法如何执行此操作或在我的调试器中获取更多信息?我在进程中附加了一个 Insight 监视器,但它报告成功完成。

【问题讨论】:

    标签: azure azure-functions azure-cosmosdb


    【解决方案1】:

    我注意到您正在为 RowKey 属性传递一个数值。

    RowKey: entGen.String(1)
    

    当我使用该代码时,它抱怨了这一点。

    当我将代码更改为:

    RowKey: entGen.String('1')
    

    我能够插入实体。

    这是我的完整代码:

    const azure = require('azure-storage')
    
    const tableSvc = azure.createTableService(
        'account-name',
        'account-key',
        'https://account-name.table.core.windows.net'
    )
    const entGen = azure.TableUtilities.entityGenerator
    const testData = {
        PartitionKey: entGen.String('test'),
        RowKey: entGen.String('1'),
        name: entGen.String('It works!')
    }
    
    console.log(testData);
    
    const insertTestData = () => new Promise((resolve, reject) => {
        tableSvc.insertEntity('test', testData, (error, res) => {
            if (error) return reject(error)
            resolve(res)
        })
    })
    
    console.log('----------------');
    
    insertTestData()
    .then((result) => {
      console.log('result');
      console.log(result);
    })
    .catch((error) => {
      console.log('error');
      console.log(error);
    })
    

    我使用了azure-storage NPM 包(版本 2.10.2)。

    【讨论】:

    • 太棒了。数字周围的那些引号做到了。你知道,我昨晚考虑过,但我看着它认为.String() 方法会转换为字符串。
    猜你喜欢
    • 2018-12-05
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多