我应该开发一个单独的快速服务器,还是在我的 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 调用?的主要内容,如果未能解决你的问题,请参考以下文章

我的 Django 应用程序应该有多少个单独的应用程序

我应该使用平面表还是规范化数据库?

我应该为这个用例创建一个单独的表吗?

是 nginx 服务器特有的 CORS 错误还是我应该在我的代码中添加一些内容

我应该使用 CDN 中的 Bootstrap 还是在我的服务器上制作副本?

Mercurial:两个Windows开发人员,我的PC上的中央存储库。我应该在中央存储库中工作还是从中克隆?