>釋放Express 4,創建RESTFUL API變得更加容易。如果要創建一個單頁應用程序,則肯定需要一個支持CRUD操作的RESTFUL Web服務。我的最後一個教程重點是用Angular的$資源創建一個單頁CRUD應用程序。本教程說明瞭如何使用Express 4來設計此CRUD應用的後端API
>請注意,自Express 3以來,已更改了很多。本教程並未解釋如何將您的應用程序從Express 3升級到Express 4。相反,它將涵蓋如何直接使用Express 4創建API。所以,讓我們開始吧。>
鑰匙要點Express 4簡化了RESTFUL API的創建,使為Crud應用程序設計後端API變得更加容易。
- express 4方法express.router()創建一個可以定義中間和路由的新路由器實例。然後可以像其他任何中間件一樣在主應用程序中使用此路由器實例。 Express 4支持標準的HTTP方法,例如GET,POST,PUT和DELETE,以在數據庫上執行CRUD操作,在這種情況下為電影數據庫。這是通過創建處理這些HTTP請求的路由來完成的。 >
- 創建電影應用程序的API
- 我們的應用程序將是一個支持基本CRUD操作的簡單電影數據庫。我們將Express 4用作Web框架,將Mongoosejs作為對象建模工具。為了存儲電影條目,我們將使用mongodb。
- 在進一步前進之前,讓我們看看API的外觀: >
目錄結構
我們將在應用程序中使用以下目錄結構:
以上目錄結構有一些要點:
bin/www.js用於引導我們的應用程序。
>模型目錄存儲我們的貓鼬模型。對於此應用程序,我們只有一個名為Movie.js的文件。
>
app.js保存我們的Express App的配置。-
最後,node_modules和package.json是node.js app。
- 獲得必要的依賴項
- 為創建API,我們將使用以下模塊:
> - express
- >身體解析器
>注意 - 身體偏遠者不再是Express Core的一部分。您需要單獨下載該模塊。因此,我們已經在包裝中列出了它。
要獲取這些軟件包,我們將它們列為package.json中的依賴項。這是我們的軟件包。
<span>{ </span> <span>"name": "Movie CRUD API", </span> <span>"version": "0.0.1", </span> <span>"private": true, </span> <span>"scripts": { </span> <span>"start": "node ./bin/www" </span> <span>}, </span> <span>"main":"./bin/www", </span> <span>"engines": { </span> <span>"node": "0.10.x" </span> <span>}, </span> <span>"dependencies": { </span> <span>"express": "~4.2.0", </span> <span>"body-parser": "~1.0.0", </span> <span>"mongoose": "~3.8.11" </span> <span>} </span><span>}</span>只需運行npm安裝,所有依賴項將被下載並放置在node_modules目錄下。
創建模型
>由於我們正在為電影數據庫構建API,因此我們將創建一個電影模型。創建一個名為Movie.js的文件,然後將其放入模型目錄中。該文件的內容(如下所示)創建了一個Mongoose模型。
>
<span>var mongoose=require('mongoose'); </span><span>var Schema=mongoose.<span>Schema</span>; </span> <span>var movieSchema = new Schema({ </span> <span>title: String, </span> <span>releaseYear: String, </span> <span>director: String, </span> <span>genre: String </span><span>}); </span> module<span>.exports = mongoose.model('Movie', movieSchema);</span>>在上一個片段中,我們創建了一個新型號,電影。每部電影都有與之相關的四個屬性 - 標題,發行年,導演和流派。最後,我們將模型放在模塊中。 exports,以便我們可以從外部訪問它。
>
創建路由>我們的所有路線都在路線/電影中。首先,將以下內容添加到您的電影。
Express 4具有一個名為Express.Router()的新方法,該方法為我們提供了一個新的路由器實例。它可用於定義中間和路線。關於快速路由器的有趣觀點是它就像一個迷你應用程序一樣。您可以使用此路由器來定義中間Wares和路線,然後像其他任何中間件一樣在主應用中使用它。
獲得所有電影<span>var Movie = require('../models/movie'); </span><span>var express = require('express'); </span><span>var router = express.<span>Router</span>();</span>
用戶將get請求發送到 /api /電影時,我們應該向他們發送包含所有電影的響應。這是為此創建路線的片段。
router.route()返回一個單個路由實例,該實例可用於配置一個或多個HTTP動詞。在這裡,我們要支持GET請求。因此,我們調用get()並傳遞回調,該回調將在請求到達時被調用。在回調中,我們使用Mongoose檢索所有電影,並將其發送回客戶端以JSON。
創建新電影
router<span>.route('/movies').get(function(req<span>, res</span>) { </span> <span>Movie.find(function(err<span>, movies</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json(movies); </span> <span>}); </span><span>});</span>>我們的API應在發布 /api /電影的發布請求時在數據庫中創建新電影。必須將JSON字符串作為請求主體發送。我們將使用相同的路線 /電影,但使用方法post()而不是get()。
這是代碼:
>在這裡,我們從請求主體創建了一個新的電影實例。這是使用身體較好者的地方。然後,我們只保存新電影並發送一個響應,表明操作成功。
>請注意,方法get(),post()等。返回相同的路由實例。因此,您實際上可以鏈接前兩個電話,如下所示。
>router<span>.route('/movies').post(function(req<span>, res</span>) { </span> <span>var movie = new Movie(req.body); </span> movie<span>.save(function(err) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.send({ message: 'Movie Added' }); </span> <span>}); </span><span>});</span>
更新電影
如果用戶想更新電影,則需要將PUT請求發送到/api/Movie/:ID,並以JSON字符串作為請求主體。我們使用命名參數:ID訪問現有電影。當我們使用MongoDB時,我們所有的電影都有一個唯一的標識符,稱為_id。因此,我們只需要檢索參數:ID並使用它來查找特定的電影。執行此操作的代碼如下所示。
><span>{ </span> <span>"name": "Movie CRUD API", </span> <span>"version": "0.0.1", </span> <span>"private": true, </span> <span>"scripts": { </span> <span>"start": "node ./bin/www" </span> <span>}, </span> <span>"main":"./bin/www", </span> <span>"engines": { </span> <span>"node": "0.10.x" </span> <span>}, </span> <span>"dependencies": { </span> <span>"express": "~4.2.0", </span> <span>"body-parser": "~1.0.0", </span> <span>"mongoose": "~3.8.11" </span> <span>} </span><span>}</span>
>在這裡,我們創建一個新的路由 /電影 /:ID並使用方法put()。 Movie.findone的調用({_id:req.params.id})用於查找在URL中傳遞的ID的電影。有了電影實例後,我們將根據請求正文中的JSON進行更新。最後,我們保存了這部電影並向客戶發送回复。
>檢索電影
要閱讀一部電影,用戶需要將get請求發送到路由/api/movies/:id。我們將使用與上述相同的路線,但是這次使用get()。
><span>var mongoose=require('mongoose'); </span><span>var Schema=mongoose.<span>Schema</span>; </span> <span>var movieSchema = new Schema({ </span> <span>title: String, </span> <span>releaseYear: String, </span> <span>director: String, </span> <span>genre: String </span><span>}); </span> module<span>.exports = mongoose.model('Movie', movieSchema);</span>
>代碼的其餘部分非常簡單。我們根據傳遞的ID檢索電影並將其發送給用戶。
>刪除電影
要刪除電影,用戶應將刪除請求發送到/api/tovers/:id。同樣,該路線與上面相同,但是方法是不同的(即delete())。
><span>var Movie = require('../models/movie'); </span><span>var express = require('express'); </span><span>var router = express.<span>Router</span>();</span>
> Method Movie.Remove()從數據庫中刪除了一部電影,我們向用戶發送一條消息,指示成功。
>>現在我們都設置了。但是等等!我們需要將路由器實例放在模塊中。 Exports,以便我們可以在應用中將其用作Middlewaree。因此,這是文件電影中的最後一行。
router<span>.route('/movies').get(function(req<span>, res</span>) { </span> <span>Movie.find(function(err<span>, movies</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json(movies); </span> <span>}); </span><span>});</span>>配置應用程序
我們所有的配置都進入app.js。我們首先需要必要的模塊:
router<span>.route('/movies').post(function(req<span>, res</span>) { </span> <span>var movie = new Movie(req.body); </span> movie<span>.save(function(err) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.send({ message: 'Movie Added' }); </span> <span>}); </span><span>});</span>下一步是通過mongoose連接到mongodb:
最後,我們配置了中間件:
router<span>.route('/movies') </span> <span>.get(function(req<span>, res</span>) { </span> <span>Movie.find(function(err<span>, movies</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json(movies); </span> <span>}); </span> <span>}) </span> <span>.post(function(req<span>, res</span>) { </span> <span>var movie = new Movie(req.body); </span> movie<span>.save(function(err) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.send({ message: 'Movie Added' }); </span> <span>}); </span> <span>});</span>
如您所見,我像其他任何中間件一樣使用了路由器。我將 /API作為第一個參數to app.use(),以便將路由中間件映射到 /api。因此,最終我們的API URL變為:
router<span>.route('/movies/:id').put(function(req<span>,res</span>){ </span> <span>Movie.findOne({ _id: req.params.id }, function(err<span>, movie</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> <span>for (prop in req.body) { </span> movie<span>[prop] = req.body[prop]; </span> <span>} </span> <span>// save the movie </span> movie<span>.save(function(err) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json({ message: 'Movie updated!' }); </span> <span>}); </span> <span>}); </span><span>});</span>
/api/電影
- /api/movers/:id
- >引導
通過運行節點bin/www.js,您的api應該升起!
router<span>.route('/movies/:id').get(function(req<span>, res</span>) { </span> <span>Movie.findOne({ _id: req.params.id}, function(err<span>, movie</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json(movie); </span> <span>}); </span><span>});</span>測試API
>現在我們已經創建了API,我們應該對其進行測試,以確保所有內容都按預期工作。您可以使用郵遞員(Chrome Extension)來測試所有端點。以下是一些屏幕截圖,顯示帖子並在Postman中進行了測試。
>
結論
該應用程序的源代碼可在GitHub上下載。
>經常詢問有關使用Express 4
創建RESTFUL API的問題(常見問題解答)> RESTFUL API與其他類型的API之間有什麼區別?
RESTFUL API或代表性狀態轉移API是一種遵守REST架構風格原理的API。它們是無狀態的,這意味著從客戶端到服務器的每個請求都必須包含了解和處理請求所需的所有信息。這與其他類型的API不同,例如SOAP,這些API可以在請求之間保持狀態。 RESTFUL API還使用標準的HTTP方法,例如GET,POST,PUT,DELETE,使其易於理解和使用。 4,您可以使用app.get()方法創建基本路由。此方法採用兩個參數:路徑和回調函數。每當向指定路徑提出Get請求時,都會執行回調功能。這是一個示例:app.get('/',function(req,res){
res.send('Hello world!');});
在此示例中,向根路徑('/')提出了get請求,服務器將以“ Hello World!”響應“ Hello World!”。
如何處理Express 4?
app.post('/',function(req,res){
res.send('post request rectory');});
什麼是Express 4中的中間件,我如何使用它? >中間件功能是可以訪問請求對象(REQ),響應對象(RES)和應用程序請求響應週期中的下一個功能的函數。下一個功能是Express路由器中的一個函數,當調用時,該功能將執行成功當前中間件的中間件。中間件函數可以執行以下任務:執行任何代碼,對請求和響應對象進行更改,結束請求響應週期,調用堆棧中的下一個中間件。
如何處理Express中的錯誤4?
app.use(function(err,req,res,sext){
console.error(err.stack);>如何在Express 4個路由中使用參數?
您可以使用路由參數捕獲URL中的動態值。然後,您的路由處理程序可以使用這些值。這是一個示例:
app.get('//users/:userId',function(req,res){
res.send('用戶ID是:'req.params.userid);
} );
在此示例中,當向“/用戶/123”提出Get請求時,服務器將使用“用戶ID為:123”。 Express 4?
express 4提供了用於服務靜態文件的內置中間件功能,express.static()。您可以使用它從服務器上的目錄中使用文件。以下是一個示例:
app.use(express.static('public'));在此示例中,可以直接從root url('/')中直接訪問'public''目錄中的文件。
>如何在Express 4?
> app.use(bodyparser.urlenceded({extended:true }) );
在此示例中,將身體較低的中間件配置為解析JSON和URL編碼的身體。
>如何我是否可以在Express 4?
中處理404個錯誤,您可以通過在中間件堆棧的末尾添加中間件功能來處理404錯誤。如果沒有其他路由處理程序或中間件功能處理該請求,將執行此功能。這是一個示例:
app.use(function(req,res,sext){
}); 在此示例中,如果向不存在的路徑提出請求,則服務器將以404的狀態代碼響應,並發出一條“對不起,我們找不到的消息!”。我如何使用Express Express 4?
> Express路由器中的路由器是Express 4中的迷你應用程序,可讓您以模塊化的方式組織路線。您可以使用Express.Router()創建一個新路由器,向其添加中間件和路由,然後在App.use()中使用它。這是一個示例:
var router = express.router();
router.get('/',function(req,res){
res.send('Router!'Hello!') ;
app.use('/Router',Router);
在此示例中,當向'/Router提出GET請求時,服務器將響應“路由器的你好!” 。以上是用Express 4創建靜止的API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版
視覺化網頁開發工具

Dreamweaver CS6
視覺化網頁開發工具