我应该开发一个单独的快速服务器,还是在我的 next.js 应用程序中处理所有 API 调用?
Posted
技术标签:
【中文标题】我应该开发一个单独的快速服务器,还是在我的 next.js 应用程序中处理所有 API 调用?【英文标题】:Should I develop a separate express server, or handle all API calls in my next.js app? 【发布时间】:2021-07-25 06:38:19 【问题描述】:我的网站将执行 CRUD 操作,并将与 MongoDB 和 Firebase storage+auth 一起使用。
开发单独的 Express 服务器而不是在我的 next.js 应用程序中集成所有内容的原因/优势是什么?
据我所见,这一切都可以在我的 next.js 应用程序中完成,但我仍然看到许多项目使用单独的服务器。
【问题讨论】:
【参考方案1】:就我个人而言,我尽量只使用 NextJS,但如果我必须使用 Socket.io 管理实时数据,我会得到一个单独的服务器,因为除了 WebSockets,无服务器函数可以做其他所有事情。
【讨论】:
【参考方案2】:我已经使用带有 Typescript 的 Next.js 有一段时间了,到目前为止,我已经找到了一个不将 express.js
包含在我的项目中的原因。原因是 Vercel。
由于我使用 Vercel 来持续部署我的项目,并且 Vercel 不支持任何自定义服务器,截至 Docs here,我避免使用 Express 或任何其他自定义服务器。
我在使用 MongoDB 执行 CRUD 操作时没有遇到任何问题,不能说 firebase。
在 Next.js Docs 上,我发现需要考虑以下几点:
-
无法在 Vercel 上部署自定义服务器,Next.js 是为平台而设计的。
自定义服务器将移除重要的性能优化,例如无服务器功能和自动静态优化。
但归根结底,是否使用自定义服务器是非常个人的看法。这可能取决于您可能正在寻找的非常具体的用例。
【讨论】:
【参考方案3】:取决于您的应用的功能和托管方式。
无论你是使用 nextjs 的 /api 还是 expressjs,在标准服务器上运行 Next.Js 都没有什么区别。
但是,如果您在无服务器上托管(例如 Vercel),如果您有大量 CRUD 操作,我建议您使用单独的快速服务器,因为无服务器的预热确实很糟糕的用户体验。
构建和部署
Next/JS - 如果您想在后端编辑某些内容并推送更改,这将需要您构建整个 JS 应用程序,并且取决于您的应用程序有多大,这可能需要很多时间(尤其是如果有很多静态生成的页面)。
Express - 如果您单独运行 express,您可以分别构建和部署前端和后端。节省时间,您还可以更好地组织您的代码前端/后端。
部署选择
我可以选择利用 Vercel 来托管我的前端,其中包含静态生成的页面和一些服务器端生成的页面(自动缩放、缓存、CDN 等),并使用单独的服务器集群托管我的后端。
PS:我从单个 Next.JS 应用转移到 NextJs+Express
【讨论】:
您能否详细解释一下在无服务器上托管时的预热问题?我确实计划使用vercel。我不希望有太多的 crud 操作。 无服务器函数在第一次被调用时需要一些时间来“启动”,在此期间它被称为“预热”。所以在执行第一个函数之前需要几秒钟。功能预热后,它会在关闭前继续可用几分钟。在此期间,它将正常响应。如果您的页面长时间未访问,则第一个访问者将在几秒钟后看到您的页面(如果是 s-s-r)。你可以谷歌“无服务器热身”【参考方案4】:它实际上是基于您想要做的,与 MongoDB 和 Firebase 的额外交互在两种技术上都是相同的,除非您想分别隔离各自的事物,我认为一起做所有事情没有任何害处下一个。
鉴于使用 next.js 的想法,根据我的理解将是利用服务器端渲染。
【讨论】:
【参考方案5】:我可以想到为什么他们会使用与 NextJS 提供的服务器不同的服务器:
-
熟悉 Express、Koa 等。所有next-connect 对此都有帮助
在 php、Express、Flask 等中已经存在 API。
【讨论】:
以上是关于我应该开发一个单独的快速服务器,还是在我的 next.js 应用程序中处理所有 API 调用?的主要内容,如果未能解决你的问题,请参考以下文章
是 nginx 服务器特有的 CORS 错误还是我应该在我的代码中添加一些内容