摘要:原文譯者如果你曾經(jīng)去過一個坐下來就餐的餐廳,那么你可以了解的基礎(chǔ)知識。而且由于缺少路徑,它將在每個請求上運行。這就是路由的來源。到目前為止,你已經(jīng)雇傭了一位經(jīng)理,在接受客戶請求之前定義了要做的事情,并且確定如何處理特定的客戶請求。
原文:Going out to eat and understanding the basics of Express.js
譯者:neal1991
welcome to star my articles-translator , providing you advanced articles translation. Any suggestion, please issue or contact me
LICENSE: MIT
如果你曾經(jīng)去過一個坐下來就餐的餐廳,那么你可以了解 Express 的基礎(chǔ)知識。 但是,如果你剛剛開始構(gòu)建你的第一個 Node.js 后端......你可能并不會很順利。
是的 - 如果你曾經(jīng)有過 JavaScript 經(jīng)驗,學(xué)習(xí) Node 肯定更容易。 但是,在構(gòu)建后端時面臨的挑戰(zhàn)與在前端使用JavaScript 時所面臨的挑戰(zhàn)完全不同。
當(dāng)我學(xué)習(xí)Node時,我選擇了困難的方式。 我一遍又一遍地學(xué)習(xí)電子書,寫作教程和視頻,直到我終于明白我為什么要做我正在做的事情。
有一個更簡單的方法。 我打算用一個餐館的比喻來解釋你的第一個應(yīng)用程序的四個關(guān)鍵部分。 Express.js 是一個組織你的代碼的流行框架,我會為任何初學(xué)者推薦它。 稍后我會進(jìn)一步解釋。
下面是我們將會涉及到的四個關(guān)鍵部分:
The require statements
Middleware
Routing
App.listen()/ Starting the server
在這個比喻中,你是一個餐館老板,希望雇用一個總經(jīng)理 - 創(chuàng)建所有流程并且進(jìn)行管理,這樣餐廳就可以順利運行,客戶也就快樂了。
下面是接下來部分的預(yù)覽:
最后,你將會理解基本 Express app 的每個部分的功能。
步驟1: 雇傭經(jīng)理 (require statements)在這個例子中,你是餐館老板。 而且你需要聘請專家來管理你的新餐廳的日常運作。 你當(dāng)然不是專家,你不能把它交給服務(wù)員和廚房去搞清楚。
如果你想經(jīng)營一家高效安全的餐廳,你需要有人來保證你的員工以最高的效率工作。 Express 就是新的經(jīng)理。
第一部分非常簡單。 與其他 NPM 軟件包一樣,你需要使用 npm 安裝 express 模塊,然后使用 require statement 來加載模塊。
不像其它的許多 NPM 包,你也需要使用這行:
const app = express();
這是因為你需要一個變量來保存你的新的 Express 應(yīng)用程序。 Express 不是 Node 的默認(rèn)部分。
步驟二: 在餐廳做決定 (middleware)讓我們在這停一下。餐廳里最常見的例程有哪些?我們腦海中立馬出現(xiàn)了3個:
給新顧客安排座位
接受食物訂單
在用餐結(jié)束進(jìn)行確認(rèn)
對于每一個例程,都需要進(jìn)行一系列的進(jìn)程才能執(zhí)行行動。比如,在你給顧客安排座位之前,你需要知道:
他們是不是穿了襯衫和鞋子(以及褲子)?否則,他們不能被安排座位。
如果他們想坐在吧臺那里,他們是否已經(jīng)有21歲(如果你在美國的話)
這不是海灘酒吧! 同樣,在你的代碼中,你需要驗證請求是否具有某些標(biāo)準(zhǔn),然后才能繼續(xù)。 例如,如果有人嘗試登錄到你的網(wǎng)站:
他們是否具有賬戶?
他們是否輸入了正確的密碼?
這是 middleware 概念的來源。Middleware 功能允許你對任何傳入的請求采取行動,并在發(fā)回響應(yīng)之前對其進(jìn)行修改。
在你的餐廳,你需要一系列的規(guī)則來決定你是否應(yīng)該接待來訪的人。 比方說,一對夫婦走進(jìn)你的餐廳。 在給他們一張桌子之前,你有一條規(guī)則:他們穿著襯衫和鞋子嗎?
首先,你從app.use()開始。這意味著這些僅僅是下一個路線需要應(yīng)用的規(guī)則。它們不是 GET,POST,PUT或DELETE。
在第四行,你有一個匿名函數(shù),參數(shù) req,res 和 next。對于這個代碼塊的目的,你只是檢查請求(req),看它是否有襯衫和鞋子。
你最后還需要使用next()函數(shù),因為你只是在這里驗證服裝。之后,在路線中,你將允許客人獲得實際的桌子。
在第五行和第六行,你檢查他們是否有襯衫和鞋子。
而在第7-9行中,只有兩者兼而有之才行。
上面的代碼塊缺少一個重要的事情:一個路徑。這是請求中包含的特定字符串。而且由于缺少路徑,它將在每個請求上運行。
你可以想象?當(dāng)顧客進(jìn)入餐館...點了食物...要求支票...員工將被迫在他們上下看他們確定他們穿衣服!這是一個快速停業(yè)的辦法。
所以,我們在上面的例子中改變第4行。 現(xiàn)在,我們只會在用戶請求“/ table”路徑時運行這個代碼。
完整的解釋:
步驟3: 執(zhí)行常見的例程 (路由)讓我們繼續(xù)就座的例子。 到目前為止,我們只知道如何驗證某人是否應(yīng)該就做。 但是我們實際上并不知道如何把他們指引到桌子旁邊并且就坐。
這就是路由的來源。路由允許我們根據(jù)路徑編寫具體的行動。 選項是 GET,POST ,PUT 和 DELETE,但現(xiàn)在我們將重點介紹 GET 和 POST。
在餐廳的環(huán)境下,我們需要創(chuàng)建一個 GET 請求,以便選擇一個特定的桌子并安排客人就做。 GET 不會修改或添加新數(shù)據(jù)到你的數(shù)據(jù)庫。 他們只是檢索基于特定參數(shù)的信息。
在這種情況下,假設(shè)你需要創(chuàng)建一個程序來安排兩個派對。 2號來自客戶的要求。
好的,在我解釋之前:是的,這只是在最后發(fā)送信息。 實際上還沒有找到一個具體的表格來給客戶安排座位。 我需要在一個數(shù)組中搜索一個打開的表格,這涉及到更多的背景故事......這超出了本教程的范圍。
在第12行中,我們定義了當(dāng)賓客請求"table"路由時查找表的過程。 就像上面的中間件示例一樣,我們有可用的請求和響應(yīng)參數(shù)。 它也有一個參數(shù),金額。 在這個例子中,這是兩個。
事實上,第12行函數(shù)聲明之后的所有內(nèi)容在技術(shù)上都是middleware,因為它修改了用戶請求。 你會看到圖中的結(jié)尾。
在第13行中,我們從請求對象的參數(shù)中訪問聚會中的人數(shù)。 由于請求來自用戶,所以沒有聲明任何地方,我們沒有任何前端代碼。 所以如果這是一個真正的應(yīng)用程序,請求可能如下所示:
req = { params: { amount: 2; } }
在第13行中,我們的 party 變量訪問請求中的 params 對象的 amount 屬性。
最后在第14行,我們發(fā)送響應(yīng)給客戶:我們正在尋找合適的桌子。
這是一次很多。 下面一張圖表:
步驟3.5: 讓你的餐廳有效率 (路由)現(xiàn)在您可以追蹤從請求到響應(yīng)的完整路徑。 但是,隨著你的應(yīng)用程序的規(guī)模不斷擴大,你將不希望多帶帶為每條路由編碼規(guī)則。 你會發(fā)現(xiàn)一些路由共享相同的規(guī)則,所以你需要找到一種方法來將一組規(guī)則應(yīng)用到多個路由。
就座位而言,您可以將你的客戶安置在吧臺或餐桌旁。 他們有襯衫和鞋子的共同規(guī)則,但是在酒吧里坐著要求每個人都超過 21歲。
而且,在服務(wù)客戶方面,你需要使用稍微不同的程序來供應(yīng)開胃菜,主菜和晚餐。 但是,這三條路線也有很多共同之處。
這是路由器進(jìn)來的地方。路由器讓你分組你的路由,這樣你就可以創(chuàng)建通用的規(guī)則。
我們需要創(chuàng)建 middleware 來覆蓋這些情況。 現(xiàn)在我會將考慮到上面的就座案例,對上面的代碼進(jìn)行重寫。
這是完整的代碼片段:
我們的路由器。
在第6行和第14行,我們現(xiàn)在使用seatingRouter.use()來代替app.use()來表示這個中間件只與seatRouter路由有關(guān)。
最后,在第21行中,我們添加了更多的中間件,以顯示每個座位路由器以“/ seating”開頭。 所以,如果有人要求在酒吧坐一個座位,完整的路徑是"/ seating / bar",這可能會有點不合理,因為當(dāng)你在第4行創(chuàng)建路由器時,你可能會預(yù)期路徑被定義。 這很正常!
這里是以圖表的形式:
并且當(dāng)你添加一個 GET 路由的時候, 它將會轉(zhuǎn)到你上面分配的路由。
步驟4: 開放營業(yè) (端口)好吧,最后一部分。 到目前為止,你已經(jīng)雇傭了一位經(jīng)理,在接受客戶請求之前定義了要做的事情,并且確定如何處理特定的客戶請求?,F(xiàn)在,你只需確定所需位置的地址即可。
你的服務(wù)器端口有點像餐廳本身的地址。 由于你的服務(wù)器可以同時處理多種類型的餐廳(或服務(wù)器端腳本),因此你需要告知每個腳本應(yīng)在哪里運行。
在上面的例子中,端口是 3000,它位于你的計算機上。 所以如果你輸入:
? https://localhost:3000/
在你的瀏覽器中,并且你在運行你的 Node 應(yīng)用程序,服務(wù)器知道運行特定的腳本。 在這種情況下,只要輸入URL,您將在控制臺中記錄消息,并能夠使用任何路由。 如果餐廳本身是您的電子商務(wù)應(yīng)用程序,那么它現(xiàn)在在地址 3000 處開始營業(yè)。
你喜歡這個教程嗎? 給它點贊,讓別人也可以發(fā)現(xiàn)它。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89708.html
摘要:歡迎進(jìn)入基礎(chǔ)課程博客地址本系列文章將主要針對一些基礎(chǔ)知識點進(jìn)行講解,為平時歸納所總結(jié),不管是剛接觸開發(fā)菜鳥還是業(yè)界資深人士,都希望對廣大同行帶來一些幫助。若有問題請及時留言或加。 歡迎進(jìn)入JAVA基礎(chǔ)課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎(chǔ)知識點進(jìn)行講解,為平時歸納所總結(jié),不管是剛接觸JAVA開發(fā)菜鳥還是業(yè)界...
摘要:歡迎進(jìn)入基礎(chǔ)課程博客地址本系列文章將主要針對一些基礎(chǔ)知識點進(jìn)行講解,為平時歸納所總結(jié),不管是剛接觸開發(fā)菜鳥還是業(yè)界資深人士,都希望對廣大同行帶來一些幫助。若有問題請及時留言或加。 歡迎進(jìn)入JAVA基礎(chǔ)課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎(chǔ)知識點進(jìn)行講解,為平時歸納所總結(jié),不管是剛接觸JAVA開發(fā)菜鳥還是業(yè)界...
摘要:而且目前大部分編程語言的高級應(yīng)用都會用到數(shù)據(jù)結(jié)構(gòu)與算法以及設(shè)計模式。隊列在尾部添加新元素,并從頂部移除元素。最新添加的元素必須排在隊列的末尾。 前言 JavaScript是當(dāng)下最流行的編程語言之一,它可以做很多事情: 數(shù)據(jù)可視化(D3.js,Three.js,Chart.js); 移動端應(yīng)用(React Native,Weex,AppCan,Flutter,Hybrid App,小程...
摘要:框架中間件作為的老牌框架是現(xiàn)有框架中最全面的。然而在學(xué)習(xí)除了那些之外,對于框架最重要的就是中間件這個概念了。中間件功能可以執(zhí)行以下任務(wù)執(zhí)行任何代碼對請求和響應(yīng)對象進(jìn)行更改。結(jié)束請求響應(yīng)周期。調(diào)用堆棧中的下一個中間件。 express.js框架中間件(middleware) _express.js_作為_Node.js_的老牌框架,是現(xiàn)有框架中最全面的。然而在學(xué)習(xí)express除了那些a...
閱讀 2006·2021-11-25 09:43
閱讀 687·2021-10-11 10:58
閱讀 1764·2019-08-30 15:55
閱讀 1756·2019-08-30 13:13
閱讀 764·2019-08-29 17:01
閱讀 1872·2019-08-29 15:30
閱讀 842·2019-08-29 13:49
閱讀 2201·2019-08-29 12:13