You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Functions+Cosmos DB构建GraphQL API报Invalid URL问题求助

问题根源与解决方案

从错误日志的input: "undefined"和调用栈可以明确:部署到Azure后,Cosmos DB的环境变量未正确加载,导致COSMOS_DB_ENDPOINT取值为undefined,初始化CosmosClient时传入无效URL,触发ERR_INVALID_URL错误。

本地运行正常是因为local.settings.json中配置了完整的环境变量,但Azure Functions不会自动同步该文件的敏感配置到云端,必须手动配置。


具体排查与修复步骤

1. 检查Azure Functions应用设置

  • 登录Azure门户,找到你的Function App
  • 进入「配置」→「应用程序设置」
  • 确认以下环境变量已添加且值与本地local.settings.json完全一致:
    • COSMOS_DB_ENDPOINT
    • COSMOS_DB_KEY
    • COSMOS_CB_CONTAINER_ID
    • COSMOS_DB_DATABASE_ID
  • 注意变量名完全匹配(大小写敏感,需与代码中process.env的键一致)

2. 验证环境变量加载状态

在BolDataSource代码中添加日志输出,部署后查看函数日志确认变量是否生效:

// 在BolDataSource顶部添加
console.log("Cosmos Endpoint:", endpoint);
console.log("Cosmos Key Exists:", !!key);

3. 代码优化(可选但推荐)

  • CosmosClient是单例设计,无需每次调用接口时重复初始化,会严重影响性能。建议改为类初始化时创建一次:
import { DataSource } from "apollo-datasource";
import { Container, CosmosClient, SqlQuerySpec } from "@azure/cosmos";

const endpoint = process.env["COSMOS_DB_ENDPOINT"];
const key = process.env["COSMOS_DB_KEY"];
const containerId = process.env["COSMOS_CB_CONTAINER_ID"];
const databaseId = process.env["COSMOS_DB_DATABASE_ID"];

export class BolDataSource extends DataSource {
  private cosmosContainer?: Container;

  constructor() {
    super();
    this.initCosmosDb();
  }

  private async initCosmosDb(): Promise<void> {
    if (!endpoint || !key) {
      throw new Error("Cosmos DB endpoint或key未配置");
    }
    const cosmosClient = new CosmosClient({ endpoint, key });
    this.cosmosContainer = cosmosClient.database(databaseId).container(containerId);
  }

  getUsers = async () => {
    if (!this.cosmosContainer) {
      throw new Error("Cosmos容器未初始化完成");
    }
    const querySpec: SqlQuerySpec = {
      query: "SELECT * FROM c",
      parameters: []
    };
    const { resources: results } = await this.cosmosContainer.items.query(querySpec).fetchAll();
    return results;
  };
}

4. 部署过程排查

  • 如果使用VS Code部署,确认部署时未勾选「跳过应用设置上传」
  • 如果使用CI/CD工具(如GitHub Actions、Azure DevOps),确保部署流程中包含应用设置的配置步骤,将本地变量同步到云端

内容的提问来源于stack exchange,提问作者Sumchans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:40:29