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

如何解决Netlify无服务器函数访问Notion DB时的权限共享错误?

解决Notion集成权限错误的排查方案

问题背景

我在Netlify部署了serverless function,通过Internal Integration Token获取Notion数据库数据,前端调用代码如下:

const promise = fetch('<deployed website url on netlify>/.netlify/functions/notion-proxy');
promise.then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

函数已触发,但捕获到自定义“Internal server error”,响应体提示“Make sure the relevant pages and databases are shared with your integration”。尽管已将数据库共享给集成、检查权限并多次重新共享,错误仍存在。

serverless函数代码如下:

import { Client } from "@notionhq/client";

const apiKey = process.env.API_KEY;
const databaseId = process.env.DATABASE_ID;

const notion = new Client({ auth: apiKey });
const username = ""; // Notion username

const handler = async (event) => {
    try {
        const response = await notion.databases.query({
            database_id: databaseId,
            filter: {
                property: "ID",
                rich_text: {
                    contains: username,
                },
            },
        });

        return {
            statusCode: 200,
            headers: {
              "Access-Control-Allow-Origin": "*",
              "Access-Control-Allow-Headers": "Content-Type",
              "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE",
            },
            body: JSON.stringify(response),
        };
    } catch (error) {
        console.log("error.body: ", error.body);
        return {
            statusCode: 500,
            headers: {
              "Access-Control-Allow-Origin": "*",
              "Access-Control-Allow-Headers": "Content-Type",
              "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE",
            },
            body: JSON.stringify({ 
                error: "Internal server error",
                errorBody: error.body
            }),
        };
    }
};

module.exports = { handler };

后续需在Webflow中查询数据,求解决权限错误的可行方法。


排查解决方法

  • 验证环境变量准确性
    检查Netlify后台的API_KEY和DATABASE_ID环境变量:

    • API_KEY必须是Notion集成的完整Internal Integration Token,无多余空格、换行或拼写错误
    • DATABASE_ID需从数据库URL中准确提取(URL中https://www.notion.so/后的32位字符串),也可通过Notion API的search接口验证ID有效性
  • 检查数据库父页面权限
    若数据库嵌套在某个页面下,需确保父页面也共享给了该集成。Notion权限具有继承性,父页面未授权会导致子数据库无法被集成访问。

  • 测试无过滤的基础查询
    暂时移除filter条件,简化查询逻辑验证是否能获取数据:

    const response = await notion.databases.query({
        database_id: databaseId
        // 注释掉filter部分
    });
    

    如果能返回数据,说明问题出在filter逻辑(比如ID属性名称错误、属性类型不匹配,或username为空导致过滤无结果),而非权限问题。

  • 重新生成并更新集成Token
    进入Notion集成管理页面,删除原Internal Integration Token并重新生成,替换Netlify的API_KEY环境变量后重新部署函数,排除Token缓存或失效问题。

  • 确认集成权限范围
    检查Notion集成的权限配置,确保勾选了Read content权限(数据库查询必须的读权限),若后续有写操作需补充对应权限。

  • 查看Netlify函数完整日志
    登录Netlify后台,找到对应的serverless function,查看详细错误日志(不仅是返回的errorBody),日志可能包含Token无效、数据库ID不存在等更具体的报错信息。

  • 直接调用Notion API验证
    使用Postman或curl直接调用Notion数据库查询接口,用相同的Token和Database ID测试:

    curl -X POST "https://api.notion.com/v1/databases/{database_id}/query" \
      -H "Authorization: Bearer {API_KEY}" \
      -H "Notion-Version: 2022-06-28" \
      -H "Content-Type: application/json" \
      -d '{}'
    

    若直接调用也报错,说明问题在Notion端(权限或配置);若直接调用成功,说明问题出在Netlify函数的代码或环境配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:40