调用Notion非公开API获取公开数据时遇CORS错误求助
问题解答
为啥Postman能成功,前端代码却报CORS错?
- Postman、Thunder Client这类工具是独立的HTTP客户端,不在浏览器环境运行,完全不受浏览器的同源策略限制,所以能直接调用Notion的接口。
- 你的前端代码运行在浏览器里,浏览器会自动执行CORS校验,而Notion这个非官方API并没有配置允许你当前域名的跨域权限,因此会被拦截报错。
当然能通过编程实现,给你两个可行方案:
方案1:搭建后端代理(首推)
自己写一个后端接口,由后端去调用Notion的loadPageChunk端点,前端再请求自己的后端接口。后端请求不受浏览器同源策略约束,能完美绕过CORS问题。
给你一个Node.js(Express)的极简示例:
const express = require('express'); const axios = require('axios'); const app = express(); app.use(express.json()); // 自定义代理接口 app.post('/fetch-notion-page', async (req, res) => { try { // 后端发起对Notion接口的请求 const response = await axios.post('https://www.notion.so/api/v3/loadPageChunk', req.body, { headers: { // 模拟浏览器请求头,避免被Notion反爬机制拦截 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/118.0.0.0 Safari/537.36' } }); res.send(response.data); } catch (error) { res.status(error.response?.status || 500).send(error.response?.data || '请求失败'); } }); app.listen(3000, () => console.log('代理服务运行在3000端口'));
前端只需向http://localhost:3000/fetch-notion-page发起请求,传递原来的请求体即可。
方案2:用浏览器扩展临时绕过CORS(仅限开发测试)
如果只是本地开发测试,可以安装CORS解锁类的浏览器扩展(比如CORS Unblock),临时关闭浏览器的CORS检查。但这种方法仅适用于开发场景,绝对不能用于生产环境的正式应用。
注意事项
- Notion的非官方API没有公开文档,接口规则随时可能变更,甚至会被封禁,使用时需自行承担风险。
- 调用时尽量模拟真实浏览器的请求头(比如User-Agent、Cookie等),避免被Notion的反爬机制拦截。
内容的提问来源于stack exchange,提问作者yuvraj singh
相关产品推荐
相关产品推荐

