Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 欧美中文在线视频,草草影院网站,国产成人一区二区三区电影网站

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          2022 年10個(gè)最佳 Node.js CMS 平臺

          2022 年10個(gè)最佳 Node.js CMS 平臺推薦

          hi, 大家好, 我是徐小夕,之前和大家分享了很多**「低代碼可視化」「和」「前端工程化」「相關(guān)的話題, 今天繼續(xù)和大家聊聊」「CMS」**系統(tǒng).
          ?

          內(nèi)容管理系統(tǒng) (「「CMS」」) 使沒有強(qiáng)大技術(shù)背景的人也能夠輕松發(fā)布內(nèi)容。我們可以使用 「「CMS」」 來管理我們的內(nèi)容和交付。市面上有不同類型的 「「CMS」」,它們執(zhí)行不同的目的并具有不同的功能。

          在本文中,我將和大家分享一下 「「2022」」 年使用的一些最佳 「「Node.js CMS」」,希望可以作為我們選擇最佳 「「CMS」」 的指南。

          什么是內(nèi)容管理系統(tǒng)?

          內(nèi)容管理系統(tǒng)是一種軟件應(yīng)用程序,它提供圖形用戶界面,其中包含我們可以用來創(chuàng)建、更新、管理和發(fā)布內(nèi)容的工具。

          內(nèi)容存儲在數(shù)據(jù)庫中,并通過 CMS 提供的展示層或前端層(通常以網(wǎng)站模板的形式)顯示給目標(biāo)受眾。

          有不同類型的 「「CMS」」,但最常見的如下:

          1.傳統(tǒng)內(nèi)容管理系統(tǒng)

          傳統(tǒng)的 「「CMS」」 是一個(gè)整體且緊密耦合的系統(tǒng)。對于傳統(tǒng)的 「「CMS」」,內(nèi)容和前端層或“頭部”緊密相連。傳統(tǒng)的 「「CMS」」 提供了顯示內(nèi)容的前端層。

          傳統(tǒng) 「「CMS」」 的入門門檻較低。它提供模板、拖放界面和所見即所得編輯器,使非開發(fā)人員無需編程或技術(shù)知識即可創(chuàng)建網(wǎng)站。

          2.無頭內(nèi)容管理系統(tǒng)

          「「Headless CMS」」 是僅后端且 「「API」」 優(yōu)先的內(nèi)容交付系統(tǒng)。它沒有傳統(tǒng) 「「CMS」」 的限制。

          與傳統(tǒng)的 「「CMS」」 不同,無頭 「「CMS」」 不提供展示層。相反,它充當(dāng)我們內(nèi)容的基于云的存儲。內(nèi)容與前端展示解耦。

          開發(fā)人員通過 「「CMS」」 提供的 「「API」」(無論是 「「REST」」 還是 「「GraphQL」」)訪問他們需要向用戶顯示的內(nèi)容。

          由于基于 「「API」」,開發(fā)人員可以自由選擇他們喜歡使用的工具、編程語言和框架。

          3.混合內(nèi)容管理系統(tǒng)

          混合 「「CMS」」 融合了傳統(tǒng)和無頭 「「CMS」」 體驗(yàn)。它為開發(fā)人員和營銷人員提供了兩全其美的優(yōu)勢。

          它是無頭 「「CMS」」「「API」」 優(yōu)先方法與傳統(tǒng) 「「CMS」」 的模板系統(tǒng)的組合。

          混合 「「CMS」」 為市場和內(nèi)容編寫者提供了傳統(tǒng) 「「CMS」」 熟悉的界面和體驗(yàn),并為開發(fā)人員提供了跨多個(gè)渠道交付內(nèi)容所需的 「「API」」 訪問權(quán)限。

          基于 Node.js 的 CMS

          「「Node.js CMS」」 是用 「「Node.js」」 構(gòu)建的 「「CMS」」;然而,這并不意味著開發(fā)人員只能使用 「「Node.js」」

          接下來就來介紹一下 「「2022」」 年比較活躍的 「「CMS」」

          1. Strapi

          「「Strapi」」 是一種流行、靈活且開源的無頭 「「CMS」」,使我們能夠創(chuàng)建豐富的數(shù)字體驗(yàn)。「「Strapi」」 提供了 「「REST」」「「GraphQL API」」,開發(fā)人員可以使用這些 「「API」」 來訪問存儲在其存儲庫中的內(nèi)容。

          我們可以通過其可調(diào)整的設(shè)置和管理面板自定義 「「Strapi」」 以滿足我們的需求。我們還可以通過安裝社區(qū)開發(fā)的插件來擴(kuò)展 「「Strapi」」 的功能。

          「「Strapi」」 支持多種數(shù)據(jù)庫,例如 「「MongoDB」」「「SQLite」」「「MySQL PostgreSQL」」「「MariaDB」」

          「「Strapi」」 提供永久免費(fèi)的社區(qū)計(jì)劃和其他基于用戶需求的付費(fèi)定價(jià)選項(xiàng)。

          特點(diǎn):

          • 完全可定制
          • REST 和 GraphQL API
          • 插件市場
          • 國際化支持

          網(wǎng)址: https://strapi.io/

          2. Ghost

          「「Ghost」」 是一個(gè)強(qiáng)大的發(fā)布平臺,受到世界領(lǐng)先的作家、創(chuàng)作者和專業(yè)內(nèi)容團(tuán)隊(duì)的信賴。

          「「Ghost」」 專注于為出版商、企業(yè)家和開發(fā)人員簡化在線發(fā)布流程。簡而言之,「「Ghost」」 使博客和發(fā)布 「「Web」」 內(nèi)容變得簡單。

          我們可以在使用 「「Ghost」」 時(shí)保持高效,因?yàn)樗鼮閷I(yè)人士日常使用的常用工具提供了集成。

          「「Ghost」」 提供了一個(gè) 「「REST API」」,開發(fā)人員可以使用它來檢索 「「CMS」」 數(shù)據(jù)并將其顯示給目標(biāo)受眾。

          它首先是一個(gè)開源軟件,因此我們可以免費(fèi)克隆存儲庫并將實(shí)例部署到我們的服務(wù)器上。但是,「「Ghost」」 提供不同的付費(fèi)計(jì)劃,其基本計(jì)劃為每月 9 美元。

          特點(diǎn)

          • 搜索引擎優(yōu)化
          • 第三方集成
          • 主題市場
          • REST API
          • 國際化支持
          • 觀眾參與度分析
          • 電子郵件營銷
          • 功能豐富的編輯器,專注于內(nèi)容
          • 內(nèi)置訂閱和會員管理

          網(wǎng)址: https://ghost.org/

          3. Sanity

          「「Sanity」」 的用途遠(yuǎn)不止傳統(tǒng)的 「「Web」」 體驗(yàn)。從投資組合和公司網(wǎng)站到電子商務(wù)應(yīng)用程序,「「Sanity」」 的應(yīng)用無處不在。

          「「Sanity」」 提供了一個(gè) 「「GraphQL API」」,開發(fā)人員可以使用它來訪問存儲在其存儲庫中的內(nèi)容。

          「「Sanity」」 提供了廣泛的插件和第三方集成,我們可以用來定制我們的工作場所并擴(kuò)展其功能。它提供免費(fèi)套餐并有其他定價(jià)選項(xiàng)。

          特點(diǎn)

          • GraphQL API
          • 國際化支持
          • 適應(yīng)性強(qiáng)且用途廣泛——可以擁有超越傳統(tǒng) Web 體驗(yàn)的不同應(yīng)用程序
          • 不斷發(fā)展的社區(qū)——廣泛的指南、插件和代碼示例

          網(wǎng)址: https://www.sanity.io/

          4. ButterCMS

          「「ButterCMS」」 是一個(gè) 「「API」」 驅(qū)動的 「「CMS」」 和博客引擎,用于快速網(wǎng)站開發(fā),可滿足開發(fā)人員和營銷人員的需求。

          作為 「「API」」 驅(qū)動的 「「CMS」」,它對開發(fā)人員友好。但是,憑借內(nèi)置 「「SEO」」、預(yù)覽、修訂歷史記錄和日程安排等功能,「「Butter」」 使?fàn)I銷人員能夠做到最好。

          「「Butter」」 將媒體管理提升到一個(gè)新的水平。除了存儲和優(yōu)化圖像,「「Butter」」 還提供了一個(gè)內(nèi)置的圖像編輯器,我們可以使用它來轉(zhuǎn)換、裁剪、調(diào)整大小、應(yīng)用過濾器等等。

          「「Butter」」 有一個(gè)非商業(yè)用途的免費(fèi)開發(fā)者計(jì)劃。其基本付費(fèi)計(jì)劃為每月 83 美元。

          特點(diǎn)

          • REST API
          • 內(nèi)置圖像編輯器
          • 國際化
          • 搜索引擎優(yōu)化

          網(wǎng)址: https://buttercms.com/

          5. Apostrophe

          「「Apostrophe CMS」」 稱自己為“一個(gè)強(qiáng)大且靈活的網(wǎng)站構(gòu)建平臺,適用于數(shù)字機(jī)構(gòu)、「「SaaS」」 公司、高等教育、企業(yè)等。”

          「「Apostrophe」」 是使用 「「Node.js」」「「Express」」「「MongoDB」」「「Vue.js」」 等技術(shù)構(gòu)建的。

          「「Apostrophe」」 有一個(gè)擴(kuò)展和集成系統(tǒng),可為 「「SSO」」、表單、營銷、「「SEO」」、設(shè)計(jì)、安全等用例提供各種擴(kuò)展。它還提供了拖放功能,我們可以利用它來構(gòu)建網(wǎng)站的前端結(jié)構(gòu)。

          特點(diǎn)

          • 自定義插件支持
          • REST API
          • 拖放界面
          • 國際化

          網(wǎng)址: https://apostrophecms.com/

          6. Prismic

          「「Prismic」」 是一個(gè)用于編輯在線內(nèi)容的無頭 「「CMS」」。我們可以使用 「「Prismic」」 構(gòu)建從簡單、編輯和企業(yè)網(wǎng)站到電子商務(wù)商店的所有內(nèi)容。

          「「Prismic」」 有一個(gè)功能,內(nèi)容切片,我們可以用它來將我們網(wǎng)站的頁面分成不同的部分。我們可以使用內(nèi)容切片來創(chuàng)建可重用的自定義組件,并為登陸頁面、微型網(wǎng)站、案例研究和推薦構(gòu)建動態(tài)布局。

          「「Prismic」」 提供了 「「REST」」「「GraphQL API」」,開發(fā)人員可以使用這些 「「API」」 來訪問存儲在其存儲庫中的內(nèi)容。它還為 「「C#」」「「JavaScript」」「「Ruby」」「「Java」」 等不同的編程語言提供 「「SDK」」

          「「Prismic」」 是一個(gè)負(fù)擔(dān)得起的低成本 「「CMS」」,它有一個(gè)免費(fèi)的社區(qū)計(jì)劃。

          網(wǎng)址: https://prismic.io/

          7. Tina

          「「Tina」」 是一個(gè)免費(fèi)且完全開源的無頭 「「CMS」」,專為 「「Next.js」」「「Gatsby」」 等基于 「「React」」 的框架構(gòu)建。它為存儲在 「「Markdown」」「「JSON」」 中的內(nèi)容提供可視化編輯體驗(yàn)。

          **「Tina」**支持 「「MDX」」,它使開發(fā)人員能夠創(chuàng)建動態(tài)、交互式和可自定義的內(nèi)容。

          「「Tina」」 提供了一個(gè) 「「GraphQL API」」,我們可以使用它來查詢和獲取我們的內(nèi)容。還有一個(gè) 「「Cloudinary」」 包,我們可以用它來優(yōu)化和管理我們的媒體文件。

          特點(diǎn)

          • 很棒的實(shí)時(shí)編輯體驗(yàn)
          • MDX 支持
          • GraphQL API

          網(wǎng)址: https://tina.io/

          8. Keystone

          「「Keystone」」 是一個(gè)開源可編程后端,可讓您在幾分鐘內(nèi)創(chuàng)建高度定制的 「「CMS」」「「API」」

          我們可以使用 「「Keystone」」 來構(gòu)建最基本的網(wǎng)站或更復(fù)雜的應(yīng)用程序,例如電子商務(wù)商店。

          使用 「「Keystone」」,我們?yōu)槲覀兊膬?nèi)容描述了一個(gè)架構(gòu),并為內(nèi)容獲得了一個(gè) 「「GraphQL API」」 和漂亮的管理 「「UI」」

          我們可以在 「「Keystone」」 中為我們網(wǎng)站的不同部分創(chuàng)建自定義的可重用組件。

          特點(diǎn) GraphQL API 自定義響應(yīng)組件 靈活的關(guān)系 強(qiáng)大的過濾功能 數(shù)據(jù)庫遷移

          網(wǎng)址: https://keystonejs.com/

          9. Payload

          「「Payload」」 是一個(gè)開源、自托管的無頭 「「CMS」」,使用 「「Node.js」」「「Express」」「「React」」「「MongoDB」」 構(gòu)建。

          「「Payload」」 提供基于配置文件中定義的內(nèi)容集合自動生成的 「「REST」」「「GraphQL API」」。我們還可以將本地 「「API」」 與服務(wù)器端框架(例如 「「Next.js」」)一起使用。

          「「Payload」」 帶有內(nèi)置的電子郵件功能。我們可以使用它來處理密碼重置、訂單確認(rèn)和其他用例。「「Payload」」 使用 「「Nodemailer」」 來處理電子郵件。

          「「Payload」」 有免費(fèi)計(jì)劃和其他定價(jià)選項(xiàng)。出于開發(fā)目的,它是完全免費(fèi)的,但是一旦我們想要將項(xiàng)目推向生產(chǎn),即使我們使用免費(fèi)版本,我們也必須選擇可用的許可證之一。

          特點(diǎn)

          • REST 和 GraphQL API
          • 電子郵件功能
          • 內(nèi)容本地化
          • 安全
          • 三個(gè)計(jì)劃中任何一個(gè)的可用功能都沒有限制

          網(wǎng)址: https://payloadcms.com/

          10. Directus

          「「Directus」」 是用于管理自定義 「「SQL」」 數(shù)據(jù)庫的開源無頭 「「CMS」」。**Directus **還有一個(gè)直觀的管理應(yīng)用程序,供非技術(shù)用戶管理內(nèi)容。

          「「Directus」」 提供 「「RESTful」」「「GraphQL API」」 來管理數(shù)據(jù)庫中的數(shù)據(jù)。

          我們可以使用我們選擇的數(shù)據(jù)庫,因?yàn)?「「Directus」」 支持 「「PostgreSQL」」「「MySQL」」「「SQLite」」「「OracleDB」」「「MariaDB」」「「MS-SQL」」 數(shù)據(jù)庫。

          「「Directus」」 提供自托管的免費(fèi)計(jì)劃;還提供付費(fèi)云計(jì)劃。核心團(tuán)隊(duì)支持僅適用于云管理項(xiàng)目。

          特點(diǎn)

          • 驗(yàn)證
          • 內(nèi)容國際化
          • 免費(fèi)和開源
          • 支持任何SQL數(shù)據(jù)庫
          • 零供應(yīng)商鎖定

          網(wǎng)址: https://directus.io/

          好啦, 今天的分享就到這啦, 如果文章對你有幫助, 歡迎 「點(diǎn)贊」 + 「評論」, 鼓勵作者創(chuàng)造更優(yōu)質(zhì)的內(nèi)容~

          更多技術(shù)復(fù)盤匯總: 趣談前端

          讀:Node.js以親民,容易學(xué)習(xí)且功能強(qiáng)大而“俘獲”很多開發(fā)者,特別是基于其上的一些應(yīng)用框架也不斷產(chǎn)生,本文為你總結(jié)和推薦 5 款流行且實(shí)用的“好東西”。

          自打 2009 年以來,Node.js 成為開發(fā)者們特別是前端人員熱議的話題,還有一部分萌新的后端開發(fā)者也都開始使用 Node.js,開發(fā)網(wǎng)站和相關(guān)應(yīng)用程序。

          從流行榜上來看,在過去幾年,它的受歡迎程度確實(shí)正在不斷提升。

          它在北美稱為受歡迎的Web開發(fā)工具,包括Netflix和PayPal等大型互聯(lián)網(wǎng)客戶。

          受歡迎程度上升的原因是加載時(shí)間的減少和性能的提高。因此,我們分析 2024 年排名前 5 的 Node.js 后端框架是一件重要的事情。

          因此,本文將為各位介紹 2024 年排名前 5 的 Node.js 后端框架、它們的功能和常見用例。

          Express.js:經(jīng)過測評的“冠軍”

          Express.js 是 Node.js 著名的后端框架之一。

          它是一個(gè)開源 Web 應(yīng)用程序框架,可供開發(fā)者們免費(fèi)使用,它亦基于 Node.js 平臺構(gòu)建。Express.js 是一個(gè)極簡框架,新手和經(jīng)驗(yàn)豐富的 Web 開發(fā)人員都能很快入門并實(shí)踐。

          目前它的場景主要用于創(chuàng)建 Web 應(yīng)用程序與 RESTful API。

          是什么讓它脫穎而出?我們現(xiàn)在總結(jié)如下:

          1.高效的路由

          Express.js 提供了一種簡潔的方法來管理各種 HTTP 請求并將它們分配給特定任務(wù)。

          讓我們來看一個(gè)代碼例子:

          // app.js 
          const express=require('express'); 
          const app=express(); 
          const port=3000; 
          
          
          // 主頁的路由
          app.get('/', (req, res)=> { 
            res.send('歡迎來到主頁!'); 
          }); 
          
          
          // 路由 2 
          app.get('/user/:id', (req, res)=> { 
            const userId=req.params.id; 
            res.send(用戶資料頁面 - ID: ${userId} ); 
          });

          2.中間件支持

          Express.js 允許中間件支持處理 HTTP 請求。讓我們看一個(gè)創(chuàng)建用于記錄 HTTP 請求詳細(xì)信息中間件的簡單示例。

          const express=require('express'); 
          const app=express(); 
          const port=3000; 
          
          
          app.use((req, res, next)=> { 
            console.log([${new Date().toLocaleString()}] ${req.method} ${req.url} ); 
            next(); 
          });

          3. 輕松數(shù)據(jù)庫集成

          Express.js 與數(shù)據(jù)庫無關(guān),也就是它不強(qiáng)制使用特定的數(shù)據(jù)庫,開發(fā)者們可以選擇自己喜歡的數(shù)據(jù)庫。

          Express.js 之所以容易集成數(shù)據(jù)庫,主要是因?yàn)樗哪K化、靈活性還有提供數(shù)據(jù)庫連接和豐富的 npm 包生態(tài)系統(tǒng)。

          4. 易于學(xué)習(xí)

          Express.js 在業(yè)界中以簡單和簡約的設(shè)計(jì)而聞名,這使得我們很容易學(xué)習(xí),特別是已經(jīng)熟悉 JavaScript 和 Node.js的同學(xué)。

          此外,我們還可以使用Bit等工具輕松開始使用 Express.js ,Bit是可組合軟件的下一代構(gòu)建系統(tǒng)。

          再仔細(xì)考慮,我們會發(fā)現(xiàn) Express.js 本身就是可組合的。你可以在應(yīng)用程序的任何位置插入和播放組件。

          例如,我們可以創(chuàng)建可以在任何給定時(shí)間插拔的中間件組件。

          圖: 使用 Bit 和獨(dú)立組件設(shè)計(jì)的 Express API 的Bit Scope

          我們可以看到兩個(gè)組件:授權(quán)者和 API 應(yīng)用。這兩個(gè)組件已作為獨(dú)立的 Bit 組件實(shí)現(xiàn),并在其獨(dú)立空間中進(jìn)行維護(hù)以及版本控制。

          通過這樣實(shí)現(xiàn),我們可以快速地以可組合的方式設(shè)計(jì)自己的應(yīng)用程序!

          NestJS:帶給我們一種現(xiàn)代且結(jié)構(gòu)化的開發(fā)方法

          NestJS 是一個(gè)以構(gòu)建可擴(kuò)展且高效的 Node.js 服務(wù)器端應(yīng)用程序而聞名的框架。

          Nest 使用漸進(jìn)式 JavaScript,也具有用 TypeScript 編寫代碼的能力。盡管它完全支持 Typescript,但它可以用純 JavaScript 編寫代碼,并包括面向?qū)ο缶幊獭⒑瘮?shù)式編程和函數(shù)式反應(yīng)式編程。

          主要特點(diǎn):

          1.模塊化

          Nest.js 允許將代碼分解為單獨(dú)的可管理模塊,從而使其更易于維護(hù)。讓我們看看下面的模塊。

          import { Module } from '@nestjs/common';
          
          
          @Module({
           imports: [
            CacheModule
           ],
           controllers: [PaymentController],
           providers: [PaymentService],
          })
          export class PaymentModule {}

          payment module可以導(dǎo)出到其它模塊。在此示例中,已導(dǎo)出common模塊中的cache module。

          由于 nest.js 具有模塊結(jié)構(gòu),也比較易于維護(hù)。

          2.可擴(kuò)展

          Nest.js 通過將應(yīng)用程序分解為可管理的模塊,支持靈活的組件替換以及通過微服務(wù)和異步操作容納高流量,實(shí)現(xiàn)了無縫擴(kuò)展。

          它確保在保持可靠性的同時(shí)高效處理增加的工作負(fù)載。

          3.依賴注入

          依賴注入只是向類添加外部依賴項(xiàng)而不是在類本身內(nèi)創(chuàng)建依賴項(xiàng)的方法。讓我們看一個(gè)代碼例子。

          import {
           HttpException, Injectable, NotFoundException
          } from '@nestjs/common';
          
          @Injectable()
          export class PaymentService {
          
           constructor() {}
          
           getReceipt() {
             return 'Payment Receipt';
           }
          
          }

          上面我們已經(jīng)創(chuàng)建payment service并添加了@Injectable()注釋以使其可注入。可以按如下所述使用創(chuàng)建的服務(wù)。

          import { Controller, Get, Post, Body } from '@nestjs/common';
          import { PaymentService } from './payment.service';
          @Controller('payment')
          export class PaymentController {
           constructor(private readonly paymentService: PaymentService) {}
          @Get()
           getPaymentReceipt() {
           return this.paymentService.getReceipt();
           }
          }

          4. 類型安全

          Nest.js 使用 TypeScript 提供類型安全,可用于捕獲開發(fā)過程中的潛在錯(cuò)誤,并提高代碼的可維護(hù)性。請來看一個(gè)代碼例子:

          export class PaymentDto {
          
          
            @IsNotEmpty()
            @IsEnum(SERVICE_PROVIDER_SLUG, {
              message: `Invalid serviceProvider. Valid options are: ${Object.values(SERVICE_PROVIDER_SLUG).join(', ')}`,
            })
            serviceProvider: string;
          
            @IsNotEmpty()
            @IsNumber()
            value: number;
          
            @IsNotEmpty()
            @IsString()
            validityPeriod: string;
          
            @IsNotEmpty()
            @IsArray()
            @ArrayNotEmpty()
            @ValidateNested()
            @Type(()=> PaymentAttributesDto)
            paymentAttributes: PaymentAttributesDto[]
          
          }

          在這個(gè)例子中,我們創(chuàng)建了一個(gè)包含多個(gè)參數(shù)的 Paymentdto類,并添加了注釋來驗(yàn)證參數(shù)類型。

          舉個(gè)例子,如果我們向“value”參數(shù)發(fā)送一個(gè)字符串類型值,它將拋出一個(gè)異常。

          Koa.js:優(yōu)雅且輕量的框架

          Koa.js 是一個(gè)更輕、更小、更具表現(xiàn)力的 Web 框架,也是由 Express.js 團(tuán)隊(duì)設(shè)計(jì)的。它允許我們通過異步函數(shù)來拋棄回調(diào)并處理錯(cuò)誤。

          框架特點(diǎn)如下:

          1. 上下文對象(ctx)

          Koa.js 包含一個(gè)名為 ctx 的功能,它用于捕獲請求和響應(yīng)詳細(xì)信息。此上下文傳遞給每個(gè)中間件。可以從以下示例中看到,從methodctxrequest做對象和方法記錄。

          const Koa=require('koa');
          const app=new Koa();
          
          
          app.use(async (ctx)=> {
            const { method, url, request, response }=ctx;
            console.log('Method :' + method + ' Request : ' + request);
          });
          
          
          app.listen(3000);

          2. 組成中間件

          與 Express Js 很是相似,Koa 支持用于處理 HTTP 請求和響應(yīng)的中間件函數(shù)。在下面的示例中,我們創(chuàng)建了一個(gè)簡單的中間件:

          const Koa=require('koa');
          const app=new Koa();
          
          
          app.use(async (ctx, next)=> {
            await next(); 
          });
          
          
          app.listen(3000);

          3. Async/Await 支持

          Koa 使用 async/await 語法以更同步的方式編寫異步代碼。以下代碼示例包含使用 async/await 關(guān)鍵字。

          const Koa=require('koa'); 
          const app=new Koa(); 
          
          
          app.use(async (ctx)=> { 
            const data=await fetchData(); 
            ctx.body=Data: ${data} ; 
          }); 
          
          
          app.listen(3000);

          4.錯(cuò)誤處理

          Koa.Js 支持各種類型的錯(cuò)誤處理。我們可以使用app.emit()或ctx.throw()來處理錯(cuò)誤。下面的示例包含了上面的錯(cuò)誤處理方法。

          const koa=require('koa'); 
          const app=new koa(); 
          
          
          //錯(cuò)誤處理方法一
          app.use(async (ctx, next)=> { 
            try { 
              await Promise.reject('Something went error'); 
            } catch (err) { 
              ctx.status=err.status || 500; 
              ctx.body=err.message; 
              ctx.app.emit('error', err, ctx); 
            } 
          }); 
          
          
          //錯(cuò)誤處理方法二
          app.use(async (ctx, next)=> { 
            ctx.throw(500, 'error'); 
          }); 
          
          
          app.on('error', (err, ctx)=> { 
            console.log(err); 
          }); 
          
          
          app.listen(3000);

          Hapi.js

          Hapi.js 是 Http-API 的縮寫,是一個(gè)用于開發(fā)可擴(kuò)展 Web 應(yīng)用程序的開源框架。hapi 最基本的經(jīng)典用例之一是構(gòu)建 REST API。

          沃爾瑪實(shí)驗(yàn)室已經(jīng)使用了 hapi js 來處理“黑色星期五”等活動的流量,“黑色星期五”是網(wǎng)上購物最繁忙的日子之一。

          主要特點(diǎn):

          1.配置驅(qū)動設(shè)計(jì)

          使用它提供的配置對象,我們能夠在 Hapi.js 中配置路由、參數(shù)設(shè)置和插件等。

          const Hapi=require('@hapi/hapi');
          
          
          const server=Hapi.server({
            port: 3000,
            routes: {
              cors: true,
            },
          });
          
          
          server.route({
            method: 'GET',
            path: '/',
            handler: (request, h)=> {
              return 'Hello, Hapi!';
            },
          });
          
          
          async function start() {
            await server.start();
            console.log(Server running at ${server.info.uri} );
          }
          
          
          start();

          2. 強(qiáng)大的插件系統(tǒng)

          Hapi.js 允許輕松集成插件,它做的很體貼,不會讓人有太多麻煩。讓我們看一個(gè)代碼例子。

          const start=async function () { 
          
          
              const server=Hapi.server(); 
          
          
              await server.register([{ 
                  plugin: require('plugin1'), 
                  options: {} 
              }, { 
                  plugin: require('plugin2'), 
                  options: {} 
              }]); 
          };

          在這個(gè)例子中,我們集成了兩個(gè)插件。可以使用 key 將選項(xiàng)傳遞給插件的選項(xiàng)列表options中。

          3. 身份驗(yàn)證和授權(quán)

          Hapi.js內(nèi)置支持各種身份驗(yàn)證策略,并允許開發(fā)者輕松定義訪問控制策略。

          server.route({ 
            method: 'GET', 
            path: '/private-data', 
            handler: (request, h)=> { 
              // 僅當(dāng)經(jīng)過身份驗(yàn)證時(shí)才訪問私人數(shù)據(jù)
              const user=request.auth.credentials; 
              return Welcome, ${user.username}! ; 
            }, 
            options: { 
              auth: 'jwt', // 使用 JWT 身份驗(yàn)證策略
            }, 
          });

          基于上面的代碼示例,我們可以直接將認(rèn)證策略定義為‘jwt’。

          4. 輸入驗(yàn)證

          輸入驗(yàn)證是 hapi.js 的另一個(gè)重要方面。在options路由對象中,我們可以定義哪些輸入需要驗(yàn)證。默認(rèn)validate對象由以下值組成。

          { 
             headers: true, 
             params: true, 
             query: true, 
             payload: true, 
             state: true, 
             failAction: 'error'
          }

          Adonis.js


          Adonis.js 框架是 Node.js 中的全功能 MVC 框架。

          它能夠構(gòu)建可擴(kuò)展且可維護(hù)的應(yīng)用程序。Adonis.js 遵循與 Laravel 框架類似的結(jié)構(gòu),并包含開箱即用的 ORM、身份驗(yàn)證和路由等先進(jìn)功能。

          主要特點(diǎn):

          1.全棧MVC框架

          Adonis.js 遵循 MVC 架構(gòu)模式。使用 MVC 模式的框架有助于組織代碼,并使其更易于維護(hù)和擴(kuò)展。如下圖示:

          2. 集成 ORM(Lucid)用于數(shù)據(jù)庫交互

          Adonis.js 擁有自己的 ORM,名為 Lucid。

          Lucid 提供了一個(gè)富有表現(xiàn)力的查詢生成器,并支持各種數(shù)據(jù)庫系統(tǒng)。在 lucid 中,我們可以創(chuàng)建模型來讀取和寫入數(shù)據(jù)庫。請看下面的代碼例子。

          const Model=use('Model')
          
          class User extends Model {
          }
          
          module.exports=User

          我們正在使用此用戶模型而不是數(shù)據(jù)庫查詢。現(xiàn)在我們正在創(chuàng)建一個(gè)路由,在其中獲取用戶。

          使用時(shí)很簡單,用User 的User.all()方法來輕松獲取用戶信息。

          const Route=use('Route')
          const User=use('App/Models/User')
          
          Route.get('users', async ()=> {
          return await User.all()
          })

          3. 用戶認(rèn)證系統(tǒng)

          Adonis.js 內(nèi)置了對用戶身份驗(yàn)證和授權(quán)的支持。

          它還提供了一組用于處理用戶會話、密碼哈希和訪問控制的方法和中間件等,期待你更多的挖掘。

          結(jié)語

          以上,便是2024年的一些主流Nodes框架,雖然寫的是 2024,其實(shí)就是在后續(xù)市場上有一定優(yōu)勢和流行趨勢的框架產(chǎn)品。

          不論你選擇Express.js 是因?yàn)樗暮唵涡裕€是選擇Nest.js因?yàn)樗慕Y(jié)構(gòu)良好,還是選擇Adonis.js因?yàn)樗纳a(chǎn)力,還是選擇Koa.js因?yàn)樗膬?yōu)雅性,選擇自己合適且正確的框架都是蠻重要的。

          這些框架各有千秋,總是取決于你的需求。了解你的項(xiàng)目需要什么至關(guān)重要,并請?jiān)诖嘶A(chǔ)上選擇合適的框架。

          本文旨在幫助你尋找最新趨勢、新功能的優(yōu)秀框架,希望幫助大家成功進(jìn)行后端開發(fā),提供更好的框架選型參考價(jià)值。

          感謝大家的閱讀!

          參考:

          https://blog.bitsrc.io/top-5-nodejs-frameworks-in-2024-32c7fe9d49c6

          入探討 Node.js 網(wǎng)站重新設(shè)計(jì)

          Node.js 剛剛推出了一個(gè)新的 Next.js 網(wǎng)站并分享了幕后細(xì)節(jié)。他們考慮過 Nextra,但最終選擇了自定義 Next.js 設(shè)置。該網(wǎng)站是靜態(tài)構(gòu)建的,使用 ISR 來生成動態(tài)內(nèi)容。

          現(xiàn)在您已經(jīng)注意到nodejs.org 的全新外觀了!

          我們在設(shè)計(jì)時(shí)非常謹(jǐn)慎,既向過去致敬,又展望未來。該網(wǎng)站有許多聚合用例、數(shù)千個(gè)頁面,并且是許多人的日常資源。整個(gè)故事有一些死胡同和彎路。但最終這是集體努力的結(jié)果。憑借超過三打貢獻(xiàn)者的貢獻(xiàn)以及與精選合作伙伴的出色團(tuán)隊(duì)合作,該項(xiàng)目得以實(shí)現(xiàn)。該網(wǎng)站改進(jìn)了信息架構(gòu),以前所未有的方式將內(nèi)容帶到用戶的指尖,并在未來幾年建立了穩(wěn)定的開發(fā)平臺。我們還迭代了改進(jìn)的開發(fā)人員體驗(yàn)、更清晰的 CI/CD 反饋以及平易近人的技術(shù)堆棧。

          請繼續(xù)閱讀,更深入地了解這段旅程并洞察即將發(fā)生的事情。

          規(guī)模和限制

          nodejs.org 網(wǎng)站已經(jīng)存在超過 14 年了。類似于實(shí)用下載和文檔主頁的設(shè)計(jì)首次出現(xiàn)于 2011 年底。這是 Node.js 0.6天的背景。

          從那時(shí)起,該網(wǎng)站的規(guī)模隨著項(xiàng)目的需要而緩慢增長。它包含 1600 多頁。在鼎盛時(shí)期,它擁有近 20 種本地化語言。該域每月處理30 億個(gè)請求,傳輸?shù)臄?shù)據(jù)量為 2 PB。毫不夸張地說,該網(wǎng)站是 Node.js 社區(qū)的重要資源。確保更改不會對用戶和貢獻(xiàn)者造成不必要的干擾絕對是至關(guān)重要的。

          錯(cuò)誤的開始:nodejs.dev

          該項(xiàng)目首次嘗試重新設(shè)計(jì)于 2019 年開始。工作從新域和新存儲庫nodejs.dev開始。回想起來,這可能從一開始就無意中注定了該項(xiàng)目的失敗。該團(tuán)隊(duì)面臨著孤立開發(fā)的挑戰(zhàn)。簡而言之,這個(gè)代碼庫不是社區(qū)或貢獻(xiàn)者所在的地方。不存在已建立的貢獻(xiàn)者工作流程。已經(jīng)很忙的人們自愿貢獻(xiàn)出自己的時(shí)間,不想學(xué)習(xí)第二套工具。這是一個(gè)太沉重的負(fù)擔(dān)。該項(xiàng)目無法維持維持勢頭所需的領(lǐng)導(dǎo)力。此外,新技術(shù)堆棧的單一切換會很復(fù)雜,并對網(wǎng)站的現(xiàn)有存在構(gòu)成風(fēng)險(xiǎn)。

          然而,nodejs.dev 帶來了很多經(jīng)驗(yàn)教訓(xùn)和更新的內(nèi)容。我們創(chuàng)建了一系列綜合學(xué)習(xí)資源,并將其運(yùn)用到當(dāng)前的設(shè)計(jì)中。所有這一切正在形成一個(gè)愿景:漸進(jìn)式進(jìn)化、就地開發(fā)以及盡可能少的干擾。

          在飛行中重新組裝飛機(jī)

          2022 年,Claudio Wunder 加入了該項(xiàng)目。他彌合了兩項(xiàng)開發(fā)工作之間的差距。他引導(dǎo)網(wǎng)絡(luò)團(tuán)隊(duì)走向一個(gè)新的方向:回到現(xiàn)有的存儲庫。考慮如何重建站點(diǎn),同時(shí)仍作為生產(chǎn)級資源運(yùn)行。

          代碼庫開始在多個(gè)維度上顯示出它的年齡。設(shè)計(jì)已經(jīng)過時(shí)了。對于大多數(shù)參與該項(xiàng)目的 Web 開發(fā)人員來說,Metalsmith 和 Handlebars 模板已經(jīng)不再受歡迎。該網(wǎng)站的內(nèi)部結(jié)構(gòu)很難擴(kuò)展,而且文檔也很少。嘗試混合代碼和內(nèi)容是一個(gè)挑戰(zhàn)。

          團(tuán)隊(duì)仔細(xì)考慮了技術(shù)堆棧。正在進(jìn)行的重新設(shè)計(jì)的第一階段涉及nextra,一個(gè)優(yōu)秀的 Next.js 靜態(tài)站點(diǎn)生成器。這是一個(gè)很好的入門方式,但隨著網(wǎng)站的發(fā)展,我們需要自定義設(shè)置。我們發(fā)現(xiàn)自己越來越“突破”nextra 的慣例,依賴于 nextra 抽象的底層 Next.js 模式和強(qiáng)大工具。

          Next.js是一個(gè)自然的發(fā)展過程,以其靈活性和強(qiáng)大功能而著稱。例如,該網(wǎng)站仍然是為了最終用戶速度和基礎(chǔ)托管獨(dú)立性而靜態(tài)構(gòu)建的,但利用 Next.js 的增量靜態(tài)重新生成來獲取動態(tài)內(nèi)容(例如版本)。 React 提供的創(chuàng)作體驗(yàn)不僅更符合貢獻(xiàn)者當(dāng)前的技能,而且還與我們可以使用的更大的工具生態(tài)系統(tǒng)更加一致。

          在此過程中,我們與Vercel建立了密切的合作伙伴關(guān)系。當(dāng)網(wǎng)站的規(guī)模在靜態(tài)導(dǎo)出期間使 webpack 的內(nèi)存管理緊張時(shí),他們提供了直接支持。這是一種共生關(guān)系。我們的需求推動他們的平臺得到改進(jìn),他們的平臺使我們能夠構(gòu)建更好的網(wǎng)站。我們在公開發(fā)布之前對新版本進(jìn)行了 Beta 測試,這是該框架的真實(shí)壓力測試。

          2023 年 4 月,我們進(jìn)行了一次小型切換。這是一個(gè)有點(diǎn)諷刺的說法。拉取請求有 1600 個(gè)文件,將 GitHub UI 推向了渲染能力的極限。網(wǎng)站的基礎(chǔ)設(shè)施會發(fā)生變化,但外觀、內(nèi)容和創(chuàng)作體驗(yàn)將保持不變。這是一個(gè)重要的里程碑——證明我們可以在飛行中重建飛機(jī)。

          重新設(shè)計(jì)

          OpenJS 基金會非常友善地資助我們與設(shè)計(jì)師Hayden Bleasel一起進(jìn)行重新設(shè)計(jì)。 Hayden 為該網(wǎng)站帶來了現(xiàn)代設(shè)計(jì),并幫助我們思考遇到的多方面用例。結(jié)果是我們可以用它來指導(dǎo)我們的開發(fā)的Figma文檔。其中包括用戶體驗(yàn)流程、暗/亮模式、頁面布局、移動視口注意事項(xiàng)和組件細(xì)分。

          接下來是將設(shè)計(jì)實(shí)現(xiàn)為代碼,這是一項(xiàng)分布在世界各地的努力。重點(diǎn)放在基礎(chǔ)設(shè)計(jì)元素和結(jié)構(gòu)化組件層次結(jié)構(gòu)的順序構(gòu)建上。我們從第一天起就構(gòu)建了組件的變體,并從一開始就考慮了國際化。這減少了返工,并使新手可以輕松完成任何任務(wù)。我們開始通過Storybook和Chromatic的托管實(shí)例單獨(dú)構(gòu)建組件。 Storybook 是原型、迭代和測試組件的好地方。我們選擇使用Tailwind CSS,但重點(diǎn)是設(shè)計(jì)令牌和應(yīng)用 CSS。這種共同語言幫助新手了解我們的方法并翻譯 Figma。

          Orama搜索將網(wǎng)站的所有內(nèi)容放在用戶的指尖。它們對我們的靜態(tài)內(nèi)容進(jìn)行索引,并以閃電般的速度提供 API 內(nèi)容、學(xué)習(xí)材料、博客文章等結(jié)果。那里的團(tuán)隊(duì)直接貢獻(xiàn)了這種集成,并繼續(xù)幫助我們提供卓越的體驗(yàn)。很難想象沒有這個(gè)功能。

          Node.js 在我們社區(qū)中的影響力對我們來說很重要。因此,舊網(wǎng)站已國際化為近 20 種語言。然而,一系列不幸的事件導(dǎo)致我們重置了所有翻譯。這是一個(gè)艱難的決定,但考慮到當(dāng)時(shí)的情況,這是正確的決定。我們正在與Crowdin合作,重新建立我們的努力。這將包括仔細(xì)解析基于 MDX 的新內(nèi)容。我們期待著未來幾個(gè)月的持續(xù)內(nèi)部化。

          當(dāng)我們在新的基礎(chǔ)設(shè)施上構(gòu)建并開始預(yù)覽該網(wǎng)站并重新設(shè)計(jì)時(shí),更深入地了解最終用戶的行為是非常寶貴的。我們利用Sentry提供錯(cuò)誤報(bào)告、監(jiān)控和診斷工具。這對于識別問題和為我們的用戶提供更好的體驗(yàn)有很大幫助。在重新設(shè)計(jì)工作之前,Sentry 也很有用,可以通過重播用戶會話來識別舊站點(diǎn)中的問題。

          在所有這些集成和開發(fā)步驟中,我們一直關(guān)注最終用戶的可訪問性和性能。 Vercel 和Cloudflare支持可確保網(wǎng)站快速可靠。我們還通過 GitHub Actions 投資了 CI/CD 管道,為貢獻(xiàn)者提供實(shí)時(shí)反饋。這包括使用 Chromatic、Lighthouse 結(jié)果進(jìn)行視覺回歸測試,以及一套檢查和測試,以確保網(wǎng)站質(zhì)量保持較高水平。

          格蕾絲·霍珀和黑客啤酒節(jié)

          在整個(gè)網(wǎng)站重新設(shè)計(jì)過程中,我們積極努力打造包容和熱情的體驗(yàn)。重新設(shè)計(jì)工作與 2023 年 9 月的Grace Hopper 慶典開源日以及下個(gè)月的Hacktoberfest非常吻合。這兩個(gè)活動都向整個(gè)生態(tài)系統(tǒng)的項(xiàng)目展示了新的貢獻(xiàn)者。我們通過將“良好的第一個(gè)問題”作為離散的開發(fā)任務(wù)來為這些事件做好準(zhǔn)備。就 Grace Hopper 而言,我們還提供了現(xiàn)場指導(dǎo),以便與會者能夠以落地公關(guān)結(jié)束這一天。我們很自豪地說,我們有許多首次為該項(xiàng)目做出貢獻(xiàn)。

          僅在 Grace Hopper 期間,就有 28 位作者提出了 40 個(gè) PR。 Hacktoberfest 新增 26 個(gè) PR。

          文檔,文檔,文檔

          開源項(xiàng)目的好壞取決于它的文檔。允許新貢獻(xiàn)者異步建立上下文至關(guān)重要。為此,我們不將 DX(開發(fā)人員體驗(yàn))限制于工具。重新設(shè)計(jì)為我們提供了一個(gè)很好的機(jī)會來發(fā)現(xiàn)和改進(jìn)文檔中的差距。在此過程中,我們迭代或引入了:

          • 合作者指南
          • 內(nèi)容VS代碼
          • 貢獻(xiàn)
          • DEPENDENCY_PINNING
          • 治理
          • 自述文件
          • 翻譯

          新代碼非常注重內(nèi)聯(lián)代碼和配置注釋、關(guān)注點(diǎn)分離以及明確定義的常量。整個(gè)過程中使用 TypeScript 可以幫助貢獻(xiàn)者理解數(shù)據(jù)的形狀和函數(shù)的預(yù)期行為。

          未來的計(jì)劃

          重新設(shè)計(jì)為 Node.js 網(wǎng)站的新時(shí)代奠定了基礎(chǔ)。我們擁有堅(jiān)實(shí)的基礎(chǔ),可以持續(xù)多年。如果過去有任何指示的話,我們將在這個(gè)空間內(nèi)迭代很長一段時(shí)間。

          但工作還沒有完成。出色地:

          • 將網(wǎng)站重新設(shè)計(jì)擴(kuò)展到 API 文檔。他們位于單獨(dú)的代碼庫中,但計(jì)劃將此處開發(fā)的樣式移植到 API。這又是一項(xiàng)細(xì)致的工作,不能影響日常使用或貢獻(xiàn)。
          • 探索網(wǎng)站和 API 文檔的 monorepo。這應(yīng)該可以改善重要的耦合,并減少管理兩個(gè)獨(dú)立代碼庫的開銷。
          • 重新調(diào)整國際化努力。先前的翻譯無法延續(xù)。我們的大量降價(jià)/MDX 方法提出了一個(gè)獨(dú)特的挑戰(zhàn),我們正在與 Crowdin 合作解決。
          • 持續(xù)改進(jìn) CI/CD 流程。我們在向貢獻(xiàn)者提供自助反饋方面取得了巨大進(jìn)步,但還有更多工作要做。

          謝謝

          許多人和組織為實(shí)現(xiàn)重新設(shè)計(jì)做出了大大小小的貢獻(xiàn)。我們要感謝:

          • 首先也是最重要的是所有使這個(gè)項(xiàng)目成為可能的貢獻(xiàn)者和合作者。
          • Chromatic提供視覺測試平臺,幫助我們審查 UI 更改并捕獲視覺回歸。
          • Cloudflare用于提供為 Node.js 網(wǎng)站、Node.js 的 CDN 等提供服務(wù)的基礎(chǔ)設(shè)施。
          • Crowdin提供了一個(gè)平臺,使我們能夠本地化 Node.js 網(wǎng)站并與譯者合作。
          • Hayden Bleasel對 Node.js 重新設(shè)計(jì)的設(shè)計(jì)工作。
          • Orama提供了一個(gè)搜索平臺,可以為我們的內(nèi)容建立索引并提供閃電般快速的結(jié)果。
          • Sentry為其錯(cuò)誤報(bào)告、監(jiān)控和診斷工具提供開源許可證。
          • Vercel提供為 Node.js 網(wǎng)站提供服務(wù)和支持的基礎(chǔ)設(shè)施
          • 最后,感謝OpenJS 基金會的支持和指導(dǎo)。

          社區(qū)很強(qiáng)大,我們對共同實(shí)現(xiàn)的目標(biāo)感到興奮。

          原文鏈接

          作者:tsingc 鏈接:https://juejin.cn/post/7351454390148120588


          主站蜘蛛池模板: 国产91大片精品一区在线观看| 夜色阁亚洲一区二区三区| 亚洲色婷婷一区二区三区| 国产成人高清精品一区二区三区| 成人精品视频一区二区三区不卡 | 国产视频一区在线观看| 精品少妇ay一区二区三区| 乱人伦一区二区三区| 亚洲爆乳精品无码一区二区| 一区二区三区午夜| 久久人妻内射无码一区三区| 亚洲av乱码中文一区二区三区| 一区二区三区在线| 韩国一区二区三区视频| 无码国产精品一区二区免费16| 麻豆国产在线不卡一区二区| 亚洲综合一区二区国产精品| 嫩B人妻精品一区二区三区| 韩国福利视频一区二区| 精品国产鲁一鲁一区二区| 久久99热狠狠色精品一区| 日韩精品无码人妻一区二区三区| 无码福利一区二区三区| 亚洲中文字幕乱码一区| 日韩亚洲AV无码一区二区不卡| 中文字幕一区二区免费 | 精品国产毛片一区二区无码 | 2022年亚洲午夜一区二区福利 | 亚洲A∨精品一区二区三区下载 | 日本夜爽爽一区二区三区| 在线观看国产一区二区三区 | 无码中文字幕人妻在线一区二区三区| 国产福利电影一区二区三区,免费久久久久久久精 | 久久久久国产一区二区| 国产在线视频一区| 精品亚洲AV无码一区二区三区| 无码人妻精品一区二区蜜桃网站 | 精品日本一区二区三区在线观看| 久久久99精品一区二区| 精品无码一区二区三区爱欲| 在线视频精品一区|