用Express 4創建靜止的API
>釋放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>
創建模型
>由於我們正在為電影數據庫構建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>
>
創建路由>我們的所有路線都在路線/電影中。首先,將以下內容添加到您的電影。
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>
這是代碼:
>在這裡,我們從請求主體創建了一個新的電影實例。這是使用身體較好者的地方。然後,我們只保存新電影並發送一個響應,表明操作成功。
>請注意,方法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>
最後,我們配置了中間件:
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,我們應該對其進行測試,以確保所有內容都按預期工作。您可以使用郵遞員(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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。
