[英]Do I have to use express in Next.js project?
我正在通過Next.js
創建一個網站。 Next.js
提供SSR
和dynamic routing
。
express
嗎?Next.js
沒有提供哪些express
功能有用? 我認為next build
和next start
顯示頁面和我預期的一樣。
你不需要使用 express,Next JS 已經有自己的內置服務器。 然而,由於 express 很受歡迎,開發人員更容易與數據庫通信或處理其他后端工作。
Next.js 和 Express.js 都是服務器端渲染解決方案 (SSR)。 但是,您可以將 Next.js 與 Express.js 與自定義服務器 api 集成,如文檔中所述:
大多數情況下,默認的 Next.js 服務器就足夠了,但有時您需要運行自己的服務器以集成到現有應用程序中。 Next.js 提供自定義服務器 api 。
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/test
並傳遞req
和res
對象進行渲染時,上面的代碼將在 ./pages/test.js 處渲染 React 組件。
express
即可使用 nextJS 開箱即用; 絕大多數人沒有。如果您不在 Vercel 的平台上托管,例如自托管(AWS、Digital Ocean、Azure 等),您可以選擇定義自定義 nextjs 服務器並交換底層服務器。
什么時候定制服務器是個好主意?
場景:想象一個大公司,他們多年來建立了許多定制的基礎設施(日志記錄、AB 測試、定制 linter 等)( linkedin、netflix、任何公司…… )。 他們現在想要利用一些 NextJS 抽象,例如:
我們稱這家公司為 XCompany。 XCompany 為他們的 web 服務器使用 ExpressJS(不管哪個節點服務器/框架)。 他們希望繼續使用 ExpressJS,因為他們已經投入了大量時間、資源來構建自定義基礎架構和工具,例如 AB 測試集成、日志中間件等。
自定義服務器將允許 XCompany 繼續使用 Express 而無需進行重大更改,並且仍然受益於 NextJS 擅長的東西,如 SSR、構建系統等、良好的約定和護欄等。
當您自行托管服務器並將其部署到您的基礎設施時,您將獲得一個長時間運行的節點服務器,這與在 vercel 上托管不同,后者的服務器是無服務器 function。
NextJS 在后台使用 vanilla HTTP 服務器。 如果您想獲得類似的express
功能,例如設置/組織路線的方式,您可以使用 package 之類next-connect
。
Express 使用依賴於connect
package。 大多數 nodejs 服務器都遵循connect
,如 API 用於路由和設置處理程序。
對於來自 NodeJS 世界(python/flask)之外的人來說,組織服務器路由的連接方式有點像WASGI - Web 服務器網關接口在哲學上,但沒有規范或類似的東西。
向前發展大多數 js 運行時都在公開和使用Request
和Response
object API 並將它們公開給消費者。
請注意,這里有很多東西可以討論。 請留下后續問題,我將嘗試相應地更新此答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.