我正在通过Next.js制作一个网站。Next.js提供SSR和dynamic routing。
Next.js
SSR
dynamic routing
express
我认为next build & next start显示的页面和我预期的一样好。
next build
next start
xeufq47z1#
你不需要使用express,Next JS已经有了自己的内置服务器,但是由于express的流行,开发人员与数据库的通信或者处理其他后台工作会更加容易。
dgiusagp2#
如果您不在Vercel平台上托管,例如自托管(AWS、Digital Ocean、Azure等),您可以选择define a custom nextjs server并交换底层服务器实现/框架(* 使用express、fastify、vanilla节点等 *)。
什么时候自定义服务器是个好主意?
让我们称这家公司为XCompany。XCompany使用ExpressJS(* 无论是哪个节点服务器/框架 )作为他们的Web服务器。他们希望继续使用ExpressJS,因为他们已经投入了大量的时间、资源来构建定制的基础设施和工具,如AB测试集成、日志记录中间件等。自定义服务器将允许XCompany继续使用Express,而无需完全重写更改,并且仍然受益于NextJS接下来提供的SSR、构建系统等、漂亮的约定和护栏等。 在此回复的结尾,我链接到Lyft的工程博客,该博客介绍了他们迁移到使用NextJS及其自己的基础架构 *当您自托管您的服务器并将其部署到您的on基础结构时,您将获得一个长时间运行的节点服务器,这与在vercel上托管不同,在vercel上,服务器是一个无服务器功能。
NextJS使用的是普通的HTTP服务器,如果你想获得类似express的功能,比如路由的设置/组织方式,你可以使用像next-connect这样的包。Express用于直接依赖connect包。大多数nodejs服务器遵循connect之类的API来路由和设置处理程序。对于NodeJS世界(python/flask)之外的人来说,组织服务器路由的连接风格有点像哲学上的WASGI - Web Server Gateway Interface。
next-connect
connect
*最初投资学习定制nextJS服务器模式。
Request
Response
注意,这里有很多东西可以讨论。请留下后续问题,我会尝试相应地更新此答案
pod7payv3#
Next.js和Express.js都是服务器端呈现解决方案(SSR)。但是,您可以使用自定义服务器API将Next.js与Express.js集成,如文档中所述:大多数时候默认的Next.js服务器就足够了,但是有时候你需要运行自己的服务器来集成到现有的应用程序中。
const express = require("express"); const next = require("next"); const port = 3000; const dev = process.env.NODE_ENV !== "production"; const app = next({ dev }); const handle = app.getRequestHandler(); app.prepare().then(() => { const server = express(); server.get("/test", (req, res) => { return app.render(req, res, "/test"); }); server.get("*", (req, res) => { return handle(req, res); }); server.listen(port, (err) => { if (err) throw err; console.log(`Ready on http://localhost:${port}`); }); });
在示例中,它展示了如何使用get Express方法处理Next.js应用中的路线。当用户指向http://localhost:3000/api/test并向下传递req和res对象以进行呈现时,上面的代码将在/api/test处呈现React组件。
get
http://localhost:3000/api/test
req
res
/api/test
3条答案
按热度按时间xeufq47z1#
你不需要使用express,Next JS已经有了自己的内置服务器,但是由于express的流行,开发人员与数据库的通信或者处理其他后台工作会更加容易。
dgiusagp2#
答案:
express
来使用开箱即用的nextJS;绝大多数人都不知道。详细答案:
如果您不在Vercel平台上托管,例如自托管(AWS、Digital Ocean、Azure等),您可以选择define a custom nextjs server并交换底层服务器实现/框架(* 使用express、fastify、vanilla节点等 *)。
什么时候自定义服务器是个好主意?
**场景:**想象一下,一家大公司多年来构建了大量自定义基础设施(日志记录、AB测试、自定义链接器等),现在他们希望利用一些NextJS抽象,如:
让我们称这家公司为XCompany。XCompany使用ExpressJS(* 无论是哪个节点服务器/框架 )作为他们的Web服务器。他们希望继续使用ExpressJS,因为他们已经投入了大量的时间、资源来构建定制的基础设施和工具,如AB测试集成、日志记录中间件等。
自定义服务器将允许XCompany继续使用Express,而无需完全重写更改,并且仍然受益于NextJS接下来提供的SSR、构建系统等、漂亮的约定和护栏等。 在此回复的结尾,我链接到Lyft的工程博客,该博客介绍了他们迁移到使用NextJS及其自己的基础架构 *
当您自托管您的服务器并将其部署到您的on基础结构时,您将获得一个长时间运行的节点服务器,这与在vercel上托管不同,在vercel上,服务器是一个无服务器功能。
背景/历史
NextJS使用的是普通的HTTP服务器,如果你想获得类似
express
的功能,比如路由的设置/组织方式,你可以使用像next-connect
这样的包。Express用于直接依赖
connect
包。大多数nodejs服务器遵循connect
之类的API来路由和设置处理程序。对于NodeJS世界(python/flask)之外的人来说,组织服务器路由的连接风格有点像哲学上的WASGI - Web Server Gateway Interface。
使用自定义NextJS服务器的缺点/挑战?
*最初投资学习定制nextJS服务器模式。
*如果你没有在vercel上托管,你就不会得到无服务器的功能。如果你没有无服务器的用例,这可能不是缺点或缺点。
向前发展大多数js运行时都集中在公开和使用
Request
和Response
对象API,并将它们公开给消费者。注意,这里有很多东西可以讨论。请留下后续问题,我会尝试相应地更新此答案
资源
pod7payv3#
Next.js和Express.js都是服务器端呈现解决方案(SSR)。但是,您可以使用自定义服务器API将Next.js与Express.js集成,如文档中所述:
大多数时候默认的Next.js服务器就足够了,但是有时候你需要运行自己的服务器来集成到现有的应用程序中。
在示例中,它展示了如何使用
get
Express方法处理Next.js应用中的路线。当用户指向http://localhost:3000/api/test
并向下传递req
和res
对象以进行呈现时,上面的代码将在/api/test
处呈现React组件。