在 next.js 中调用 API 并避免 CORS 错误的最佳实践

2024-04-17

我正处于设置 next.js 应用程序的早期阶段,到目前为止我只有使用 React 的经验。

我在 localhost:3000 上设置了一个前端应用程序 (next.js),在 localhost:5000 上设置了一个后端应用程序 (node.js/express)。他们都工作。

现在我尝试从前端调用快速端点,我正在做的是:

const registerUser = async event => {
        event.preventDefault()
        
        const res = await fetch(
            process.env.NEXT_PUBLIC_SERVER + '/user/signup',
            {
                body: JSON.stringify({
                    username: event.target.name.value,
                    email: event.target.email.value,
                    password: event.target.password.value
                }),
                headers: {
                    'Content-Type': 'application/json'
                },
                method: 'POST'
            }
        )

        result = await res.json()
    }

我收到一条错误消息

Access to fetch at 'http://localhost:5000/user/signup' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

请注意:端点使用 Postman 按预期工作。

我做了一些研究,发现一些资源说我应该调用内部 next.js 端点(pages/api),然后从那里调用我的 api。这是 next.js 的最佳实践吗?在react中我只是用来直接调用api。

除了如何解决这个问题之外,我想知道这种情况下的最佳做法是什么?谢谢。


如果您有单独的前端和后端服务器(例如,next.js 和express),并且无法侦听同一端口,则有两种广泛的替代方案:

浏览器从一台服务器加载前端并向另一台服务器发出 API 请求

next.js <-- browser --> express

这需要后端应用程序设置 CORS 标头,例如使用cors https://www.npmjs.com/package/cors和声明

app.use(cors({origin: "host of next.js", ...}));

或者浏览器向 next.js 的端口发出所有请求,这会将所有 API 请求转发到其他服务器

browser --> next.js --> express

在这种情况下,不需要 CORS,但 API 请求比以前需要更多的跃点。所以这是简单性与性能的比较(就像经常发生的那样)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 next.js 中调用 API 并避免 CORS 错误的最佳实践 的相关文章

  • 在 Node.js 中实现服务器发送事件的简单方法?

    我环顾四周 似乎在 Node js 中实现 SSE 的所有方法都是通过更复杂的代码 但似乎应该有一种更简单的方法来发送和接收 SSE 是否有任何 API 或模块可以让这件事变得更简单 这是一个每秒发送一个服务器发送事件 SSE 的 Expr
  • 如何在React中处理多个路由器

    假设我们有一个网络应用程序 它通常有很多视图 例如索引页面 管理面板 帮助页面 联系人等 我在主index js 中使用react router dom 来处理它们 它工作得很好 但是现在我在开发管理面板时遇到了问题 它是 index js
  • 在express中root后通过可选参数传递路由控制?

    我正在开发一个简单的网址缩短应用程序 并有以下快速路线 app get function req res res render index link null app post function req res function makeR
  • mongoDB白名单IP

    我看到类似的帖子 但没有一个能帮助我解决我的问题 在学习了从头开始构建 MERN 应用程序的 Udemy 教程后 我陷入了 mongoose 连接的困境 这是我的 index js 代码 const express require expr
  • 关于 Node.js Promise then 和 return?

    我对承诺感到困惑 I use 那么就答应没有返回像这样 new Promise resolve reject gt resolve 1 then v1 gt console log v1 new Promise resolve reject
  • 使用 node.js 获取正在运行的进程的 stdin/stdout

    我正在从节点启动一个进程child process spawn http nodejs org docs v0 6 1 api child processes html child process spawn处理 process stdou
  • 了解 React Native 中的默认字体大小

    在过去的几个月里 我一直在开发一个 React Native 应用程序 但有些事情总是让我困惑 而我现在正试图弄清楚它的真相 我正在尝试标准化应用程序中的字体大小 正文 标题等 并且正在努力了解 React Native 究竟从哪里获取默认
  • Google 钱包 API Codelabs 示例权限被拒绝

    我正在研究使用 Google 钱包通过 Web jwt 界面存储条形码 用于电子处方 如果重要的话 的可行性 https codelabs developers google com add to wallet web 0 https co
  • isModified 并预保存 mongoose...Nodejs

    您好 我只想在密码更改时使用散列密码保存 因此我在预保存中使用了 isModified 函数 但即使我更改了密码 它也总是返回 false 我尝试这样做的原因是因为我不想在更改其他属性时更改并保存我的密码 router post chang
  • npm install 没有拉入 devDependency

    我有 npm v 1 2 32 当我跑步时 npm 安装 mongo migrate 它不安装 mongodb 这是一个 devDependency 我究竟做错了什么 虽然与这个问题没有直接关系 但有些人可能有兴趣知道如果环境变量NODE
  • 在 WSL Ubuntu 20.04 上安装 npm 后,我收到消息“/usr/bin/env: ‘bash\r’: No such file or directory”

    运行时我看到以下消息npm install or npm来自终端的命令 执行中node按预期工作 gt npm install usr bin env bash r No such file or directory 2023 年 7 月更
  • npm install 的 --save 选项是什么?

    我看到一些教程 其中命令是 npm install save 什么是 save选项是什么意思 更新 npm 5 As of npm 5 0 0 http blog npmjs org post 161081169345 v500 安装的模块
  • Next.js:如何将 source-map-explorer 与 Next.js 一起使用

    我想分析我的 Next js 构建源地图浏览器 https www npmjs com package source map explorer 有人可以帮我编写脚本吗 对于 React CRA 我使用以下脚本 build analyze n
  • 在电子生成器反应电子应用程序后,在 Windows 中出现空白屏幕

    在电子生成器反应电子应用程序后 Windows 中出现空白屏幕 这是package json 在电子生成器反应电子应用程序后 Windows 中出现空白屏幕 name SmallBusinessManagement version 0 1
  • 移动浏览器中的 React 性能

    我有一个组件 表 其中包含许多行 其中包含数据编辑 其掩码形式为contenteditable 可以选择所有字段并同时更改所有行 在桌面上它运行得相当快 但在 iPhone 6 上我有不真实的滞后 Safari 每次操作都会挂起 20 秒
  • keystonejs 模型中的动态类型选择

    我想在 adminUI 中使用一个组合框 其中包含来自 Web 服务的字段 我正在考虑使用预 查找 挂钩获取数据 然后覆盖模式中 受众 属性的选项属性 Schema Compliance add title type Types Text
  • 模拟节点外部模块默认使用 jest 的链式方法

    在我们的节点 CLI 中 我们有一个简单的方法 use strict const ora require ora module exports function startSpinner textOnStart color spinnerT
  • 永远运行 Gulp 脚本?

    是否可以运行 Gulp 脚本forever https www npmjs com package forever 我有 Gulp 脚本想要作为守护进程运行 所以我可以启动 停止 列出它 好的 所以我通过将 gulp 二进制文件从 usr
  • node-mongodb-native的插入性能

    我正在使用 MongoDB 测试 Node js 的性能 我知道其中每一个都很好 彼此独立 但我正在尝试一些测试来感受它们 我遇到了这个问题 但无法确定来源 问题 我正在尝试在单个 Node js 程序中插入 1 000 000 条记录 它
  • Electron — 无法显示自定义图标

    我在以两种不同的方式设置 Electron 应用程序的图标时遇到问题 非打包 通过终端运行应用程序 我的 main js 确实指定了一个 图标 值 指向图标文件 但它不适用 包装 使用电子包装器 我的 package json 文件指定了

随机推荐

  • 如果Bokeh有很多图表,输出文件很重并且系统很慢

    我使用散景 我非常喜欢Bokeh 因为Bokeh有很多图表并且输出文件非常简单 我在半导体公司工作 有时我会分析半导体 数据 我有很多数据 我制作了很多图表 可能是 1000 4000 次图表操作 我用Bokeh来制作图表 但是Bokeh很
  • 在 PowerShell 中检查路径是否存在的更好方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 PowerShell 中是否有更简洁且不易出错的方法来检查路径是否不存在 对于这样一个常见的用例来说 客观上来说太冗长了 if not Test
  • Symfony2 创建自己的编码器来存储密码

    我是 Symfony2 的新手 我可能有一个关于在数据库中编码用户密码的简单问题 我想以这种方式编码并存储在数据库中我的用户密码 encoded password salt sha1 salt raw password 我找到了各种编码器
  • 是Pythonic吗:命名lambdas

    我开始欣赏 python 中 lambda 表达式的价值 特别是在函数式编程方面 map 函数返回函数 https stackoverflow com a 16509 1533474等等 但是 我也在函数中命名 lambda 因为 我多次需
  • fseek() 按行而不是字节?

    我有一个可以逐行解析大文件的脚本 当它遇到无法处理的错误时 它会停止 通知我们解析的最后一行 这真的是寻找文件中特定行的最佳 唯一方法吗 fseek 在我的情况下不可用
  • ASP.NET 日期和时间选择器?

    我将 ASP NET 2 0 与 SQL Server 2005 结合使用 我希望用户选择日期和时间 然后将这些值保存到数据库中 在 VS 中 我可以使用日历控件来获取日期 但是处理用户选择的日期以及用户还必须从控件中选择的时间有什么好处
  • 如何删除 Rmd 输出到 PDF 中代码块之间的空白?

    如何删除图表末尾与下一个图表之间的多余空白 我有一个闪亮的应用程序 运行参数化的 Rmd 输出为 html 和 PDF html 很好 但 PDF 中有太多空白 我应该将所有内容都放入两页中 因此边距 几何形状很软 但是我需要在第 1 页底
  • 使用 LaTeX,如何在每个部分的末尾提供参考文献列表? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想为每个部分生成参考书目 并将其放在该部分的末尾 当我现在这样做时 它会生成完整的参考书目并将其放置在每个部分之后 有没有办法可以做到这一点 建议h
  • AFJSONRequestOperation 数组填充,但无法在成功块之外填充 NSLog 内容

    以下代码摘自本教程 http mobile tutsplus com tutorials iphone ios sdk afnetworking 我以前用过这个片段 但之前从未注意到这个问题 数组内容的 NSLog 在委托方法中打印 但不在
  • Socket IO 涉及磁盘 IO 吗?

    如果一个进程通过套接字向同一台机器上的另一个进程发送数据 传输过程中发生磁盘读 写的可能性有多大 似乎有一个套接字文件类型 如果有空闲内存 这些文件是否保证在内存中 不直接 TCP UDP 网络套接字 本地主机或 UNIX 域套接字将在内存
  • 使用 NumPy 的数据类型大小

    在 NumPy 中 我可以通过以下方式获取特定数据类型的大小 以字节为单位 datatype itemsize or datatype nbytes 例如 np float32 5 itemsize 4 np float32 5 nbyte
  • 如何从给定 C# 链接的特定 GitHub 存储库中获取文件列表?

    如何从 GitHub 链接获取文件列表 例如 来自此 GitHub 存储库链接 https github com crs2007 ActiveReport tree master ActiveReport SQLFiles 我们可以看到有S
  • 自动执行 rake 任务以在 Heroku 上启动时运行?

    假设有一个任务 rake startupscript 它应该在应用程序启动时运行 我们如何在heroku上自动化它 我知道有一个 heroku 调度程序 但它会每 10 分钟运行一次任务 而不是只在启动时运行一次 我也知道Procfile
  • 如何撤消“git add --intent-to-add”

    当我跑步时git add intent to add 所有未跟踪的文件都从 未跟踪的文件 更改了状态 git status s showed 到 未暂存提交的更改 git status s现在显示A 现在 每当我跑步时git diff我也看
  • GNU Radio OOT 模块 AttributeError:“模块”对象没有属性“MME_cpp”

    我知道这个问题以前曾被问过 但我没有找到有用的解决方案 完整的错误是 Executing home mint Documents test sensor cycl test top block py Using Volk machine a
  • 如何标记条件编译的use语句? [复制]

    这个问题在这里已经有答案了 是否可以将某些包含标记为仅包含在相关操作系统中 例如 你可以这样做 cfg unix use std os unix io IntoRawFd cfg windows https doc rust lang or
  • 在有关资源、主题和章节的规范化数据库中使用 GROUP BY 进行 JOIN

    我已经规范化了我的数据库 但似乎无法以正确的方式返回我正在寻找的数据 我有 5 张桌子 资源 5 个资源 主题 10 个主题 章节 10 章 主题到资源 18 个主题到资源链接 主题到章节 18 个主题到章节的链接 看看这个SQL小提琴 h
  • ASP.net:ClientScript.RegisterClientScriptBlock 在加载 jQuery 之前触发

    我最近查看的一些继承代码中出现了有趣的问题 我正在尝试向项目添加压缩模块 它加载所有 JS 和 CSS 文件 组合它们 缩小它们 并压缩它们 我尝试了多种解决方案 但它们都有一个致命的问题 我有一些 javascript 通过 Master
  • 处理包含“问号”(�) 的字符串时出现编码问题

    我正在解析响应中的一些网页内容HttpWebRequest 该网页内容正在使用字符集ISO 8859 1当解析它并最终从响应中得到所需的单词时 我收到了string带有这样的问号 我想知道将其转换回可读的正确方法string 所以 我尝试的
  • 在 next.js 中调用 API 并避免 CORS 错误的最佳实践

    我正处于设置 next js 应用程序的早期阶段 到目前为止我只有使用 React 的经验 我在 localhost 3000 上设置了一个前端应用程序 next js 在 localhost 5000 上设置了一个后端应用程序 node