首页 > 解决方案 > 从 Node.js 应用程序执行 cosmos 存储过程给出未定义的响应

问题描述

我已经在具有分区的 cosmos db 容器中有一个简单的存储过程。

function helloWorld() {
            var context = getContext();
            var response = context.getResponse();
            response.setBody("Hello World");
}

我从 Azure 函数调用它。

const { response } = await container.scripts.storedProcedure("helloWorld").execute("1001831197");
console.log(response)

即使我的分区键是正确的,响应也会给出未定义的。

标签: azurestored-proceduresazure-cosmosdb

解决方案


execute 是异步函数,如果你想得到这个函数的响应,你需要使用 Promise。您可以参考这个问题的答案:如何“等待”回调返回?

代码可以参考这个答案:How to execute the cosmos db stored procedure in nodejs?

我为测试创建了一个 http 触发器,它可以正常工作:

import { AzureFunction, Context, HttpRequest } from "@azure/functions"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('HTTP trigger function processed a request.');
    const name = (req.query.name || (req.body && req.body.name));
    
    const response = await executeSprocInternal("getData", "success");
    console.log(response);

    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };
    console.log("over")
};

安慰: 在此处输入图像描述


推荐阅读