Express 4でRESTFUL APIを作成します
Express 3以降、多くの変更が変更されていることに注意してください。このチュートリアルは、Express 3からExpress 4にアプリをアップグレードする方法を説明していません。それでは、始めましょう。
キーテイクアウト
Express 4は、RESTFUL APIの作成を簡素化し、CRUDアプリケーション用のバックエンドAPIを簡単に設計できます。
- Express 4では、Expressコアの一部ではなくなったため、Body-Parserを個別にダウンロードする必要があります。このモジュールは、入ってくるリクエスト本体を解析するために使用され、Req.Bodyを介してPOSTリクエストの本文へのアクセスを可能にします。
- Express 4 Method Express.Router()は、中水とルートを定義できる新しいルーターインスタンスを作成します。このルーターインスタンスは、app.use()を呼び出すことにより、他のミドルウェアと同様にメインアプリで使用できます。 Express 4は、Get、Post、Put、Deleteなどの標準のHTTPメソッドをサポートして、データベース、この場合は映画データベースでCRUD操作を実行します。これは、これらのHTTPリクエストを処理するルートを作成することで行われます。
- ムービーアプリのAPIの作成
- 私たちのアプリは、基本的なCRUD操作をサポートするシンプルな映画データベースになります。 Express 4をWebフレームワークとして、Mongoo -Osejsをオブジェクトモデリングツールとして使用します。映画のエントリを保存するには、Mongodbを使用します さらに進む前に、APIがどのように見えるかを見てみましょう:
ディレクトリ構造
アプリで次のディレクトリ構造を使用します。
上記のディレクトリ構造に関するいくつかのポイントを次に示します
bin/www.jsは、アプリをブートストラップするために使用されます。
モデルディレクトリは、マングースモデルを保存します。このアプリには、ムービーと呼ばれるファイルが1つだけあります。
ルートディレクトリには、すべてのエクスプレスルートが保存されます。
app.jsは、Expressアプリの構成を保持します
最後に、node_modulesとpackage.jsonは、node.jsアプリの通常のコンポーネントです。 必要な依存関係の取得
- APIを作成するには、次のモジュールを使用します。
- express
- ボディパーサー
- mongoose
注 - ボディパーサーは、エクスプレスコアの一部ではなくなりました。モジュールを個別にダウンロードする必要があります。したがって、Package.json。
にリストしましたこれらのパッケージを取得するには、package.jsonの依存関係としてそれらをリストします。これが私たちの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を構築しているため、映画モデルを作成します。ムービー。JSという名前のファイルを作成し、モデルディレクトリに配置します。以下に示すこのファイルの内容は、マングースモデルを作成します。
前のスニペットでは、新しいモデル、映画を作成します。各映画には、タイトル、リリース年、ディレクター、ジャンルの4つのプロパティがあります。最後に、モデルをModule.Exportsに配置して、外部からアクセスできるようにします。
<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>
すべてのルートはルート/ムービーにあります。開始するには、ムービーに次のことを追加します。JSファイル:
Express 4には、Express.router()という新しいメソッドがあり、新しいルーターインスタンスが提供されます。ミドルウェアとルートを定義するために使用できます。 Expressルーターの興味深い点は、ミニアプリケーションのようなものだということです。このルーターを使用してミドルウェアとルートを定義し、app.use()を呼び出すことにより、他のミドルウェアと同じようにメインアプリで使用できます。 すべての映画を取得する
<span>var Movie = require('../models/movie'); </span><span>var express = require('express'); </span><span>var router = express.<span>Router</span>();</span>
ユーザーが /API /ムービーにget requestを送信する場合、すべての映画を含む応答を送信する必要があります。これがこのためのルートを作成するスニペットです。
router.route()1つ以上の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>
ここにコードがあります:
ここで、リクエスト本体から新しい映画インスタンスを作成します。これは、ボディパーサーが使用される場所です。次に、新しい映画を保存して、操作が成功していることを示す応答を送信します。
メソッドは()、post()などが同じルートインスタンスを返すことに注意してください。したがって、以下に示すように、あなたは実際に前の2つの呼び出しをチェーンすることができます。映画の更新
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>
ユーザーが映画を更新したい場合、json文字列をリクエスト本文として/api/movies/:idにput requestを送信する必要があります。名前付きパラメーター:IDを使用して、既存の映画にアクセスします。 Mongodbを使用しているため、すべての映画には_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を作成し、method put()を使用します。ムービーの呼び出し({_id:req.params.id})は、URLでIDが渡された映画を見つけるために使用されます。ムービーインスタンスができたら、リクエスト本体に合格したJSONに基づいて更新します。最後に、この映画を保存して、クライアントに応答を送信します。
映画を取得単一の映画を読むには、ユーザーはルート/API/MOVIES/:IDにGETリクエストを送信する必要があります。上記と同じルートを使用しますが、今回はget()を使用します。
コードの残りの部分は非常に簡単です。渡されたIDに基づいて映画を取得し、ユーザーに送信します。
<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>
ムービーを削除するには、ユーザーは/api/movies/:idに削除要求を送信する必要があります。繰り返しますが、ルートは上記と同じですが、メソッドは異なります(つまり、delete())。
メソッドMovie.Remove()はデータベースから映画を削除し、成功を示すメッセージをユーザーに送信します。
今、私たちはすべて設定されています。でも待って! RouterインスタンスをModule.Exportsに配置する必要があります。そうすれば、アプリでMiddleWareeとして使用できるようにする必要があります。したがって、これはファイルムービーの最後の行です。
<span>var Movie = require('../models/movie'); </span><span>var express = require('express'); </span><span>var router = express.<span>Router</span>();</span>
すべての構成はapp.jsに移動しますまず、必要なモジュールを必要とすることから始めます:
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にマッピングされるように、App.use()の最初の引数として /APIを渡しました。したがって、最終的にAPI URLは次のようになります
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>
/API/MOVIES
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>
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>
次のコードはbin/www.jsに送られます。これはアプリをブートストラップします。
- ノードbin/www.jsを実行することにより、APIはアップする必要があります!
- 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>
結論
これは、ノードとエクスプレスで簡単にRESTFUL APIを作成する方法の基本的な概要でした。 Expressをより深く掘り下げたい場合は、必ずドキュメントをチェックしてください。何かを追加または尋ねたい場合は、お気軽にコメントしてください。
アプリのソースコードは、githubでダウンロードできます。
Express 4
で安らかなAPIを作成することについて、よくある質問(FAQ)
RESTFUL APIと他のタイプのAPIの違いは何ですか?RESTFUL API、または表現状態転送APIは、RESTアーキテクチャスタイルの原理を順守するAPIの一種です。これらは無国籍です。つまり、クライアントからサーバーへの各リクエストには、リクエストを理解して処理するために必要なすべての情報が含まれている必要があります。これは、リクエスト間で状態を維持できるSOAPなど、他のタイプのAPIとは異なります。 RESTFUL APIは、Get、Post、Put、Deleteなどの標準のHTTPメソッドも使用し、理解しやすく使用できます。 4、app.get()メソッドを使用して基本ルートを作成できます。この方法は、パスとコールバック関数の2つの引数を取ります。コールバック関数は、指定されたパスにGETリクエストが行われるたびに実行されます。例は次のとおりです。app.get( '/'、function(req、res){
res.send( 'hello world!');});
ルートパス( '/')にgetリクエストが行われ、サーバーは「Hello World!」で応答します。リクエストを投稿しますExpress 4、app.post()メソッドを使用できます。このメソッドは、app.get()と同様に機能しますが、Get Requestsの代わりにPOSTリクエストに使用されます。例は次のとおりです。app.post( '/'、function(req、res){
res.send( 'post request request Receece');
});
ルートパス( '/')に投稿リクエストが行われ、サーバーは「POSTリクエストを受信した」で応答します。 >ミドルウェア関数は、リクエストオブジェクト(Req)、応答オブジェクト(RES)、およびアプリケーションのリクエスト応答サイクルの次の関数にアクセスできる関数です。次の関数は、Expressルーターの関数であり、呼び出されると、現在のミドルウェアに続くミドルウェアを実行します。ミドルウェア関数は、次のタスクを実行できます。任意のコードを実行し、リクエストと応答オブジェクトを変更し、リクエスト応答サイクルを終了し、スタックの次のミドルウェアを呼び出します。 4?
app.use(function(err、req、res、next){
console.error(err.stack); res.status(500).send( '何かが壊れた! ');
});
この例では、アプリでエラーが発生した場合、コンソールにログに記録され、サーバーは500のステータスコードとのメッセージで応答します「何かが壊れた!」
Express 4ルートでパラメーターを使用するにはどうすればよいですか?
ルートパラメーターを使用して、URLの動的値をキャプチャできます。これらの値は、ルートハンドラーで使用できます。例は次のとおりです。
app.get( '/users/:userid'、function(req、res){
res.send( 'user id is:' req.params.userid);
} );
この例では、 '/users/123'にget requestが行われると、サーバーは「ユーザーID:123」で応答します。 Express 4?
Express 4は、静的ファイルを提供するために、組み込みのミドルウェア関数であるExpress.Static()を提供します。それを使用して、サーバー上のディレクトリからファイルを提供できます。例は次のとおりです。
app.use(express.static( 'public'));この例では、「public」ディレクトリ内のファイルはルートURL( '/')から直接アクセスできます。 🎜>
Express 4でボディパーサーミドルウェアを使用するにはどうすればよいですか?
var bodyparser = require( 'body-parser');
app.use(bodyparser.json());app.use(bodyparser.urlencoded({extended:true}) );
この例では、ボディパーサーのミドルウェアは、JSONとURLエンコードされたボディを解析するように構成されています。 Express 4の404エラーを処理しますか?
ミドルウェアスタックの最後にミドルウェア関数を追加することで、404エラーを処理できます。他のルートハンドラーやミドルウェア関数がリクエストを処理していない場合、この関数は実行されます。例は次のとおりです。
app.use(function(req、res、next){
});
この例では、存在しないパスにリクエストが行われた場合、サーバーは404のステータスコードと「ごめんなさい、それを見つけることができません!」というメッセージで応答します。 Expressを使用するにはどうすればよいですかExpress 4のルーター?Express Routerは、エクスプレス4のミニアプリケーションであり、モジュール式の方法でルートを整理できます。 Express.router()を使用して新しいルーターを作成し、ミドルウェアとルートを追加してから、app.use()を使用してアプリで使用できます。例は次のとおりです。
var router = express.router();
router.get( '/'、function(req、res){
res.send( 'hello from the router!'); });
app.use( '/router'、router);
この例では、get requestが '/router'に作成されると、サーバーはサーバーが行われます「Hello from the Router!」で応答します。以上がExpress 4でRESTFUL APIを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。
