Express 3以降、多くの変更が変更されていることに注意してください。このチュートリアルは、Express 3からExpress 4にアプリをアップグレードする方法を説明していません。それでは、始めましょう。
キーテイクアウト
アプリで次のディレクトリ構造を使用します。
上記のディレクトリ構造に関するいくつかのポイントを次に示します
モデルディレクトリは、マングースモデルを保存します。このアプリには、ムービーと呼ばれるファイルが1つだけあります。
ルートディレクトリには、すべてのエクスプレスルートが保存されます。
app.jsは、Expressアプリの構成を保持します
最後に、node_modulesとpackage.jsonは、node.jsアプリの通常のコンポーネントです。 必要な依存関係の取得
注 - ボディパーサーは、エクスプレスコアの一部ではなくなりました。モジュールを個別にダウンロードする必要があります。したがって、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ディレクトリの下に配置されます。
モデルの作成前のスニペットでは、新しいモデル、映画を作成します。各映画には、タイトル、リリース年、ディレクター、ジャンルの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<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に基づいて更新します。最後に、この映画を保存して、クライアントに応答を送信します。
映画を取得コードの残りの部分は非常に簡単です。渡された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())。
今、私たちはすべて設定されています。でも待って! 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に送られます。これはアプリをブートストラップします。
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>
結論
アプリのソースコードは、githubでダウンロードできます。
Express 4
app.get( '/'、function(req、res){
res.send( 'hello world!');app.post( '/'、function(req、res){
res.send( 'post request request Receece');
});
ルートパス( '/')に投稿リクエストが行われ、サーバーは「POSTリクエストを受信した」で応答します。 >ミドルウェア関数は、リクエストオブジェクト(Req)、応答オブジェクト(RES)、およびアプリケーションのリクエスト応答サイクルの次の関数にアクセスできる関数です。次の関数は、Expressルーターの関数であり、呼び出されると、現在のミドルウェアに続くミドルウェアを実行します。ミドルウェア関数は、次のタスクを実行できます。任意のコードを実行し、リクエストと応答オブジェクトを変更し、リクエスト応答サイクルを終了し、スタックの次のミドルウェアを呼び出します。 4?
res.status(500).send( '何かが壊れた! ');
});
この例では、アプリでエラーが発生した場合、コンソールにログに記録され、サーバーは500のステータスコードとのメッセージで応答します「何かが壊れた!」
ルートパラメーターを使用して、URLの動的値をキャプチャできます。これらの値は、ルートハンドラーで使用できます。例は次のとおりです。
app.get( '/users/:userid'、function(req、res){
res.send( 'user id is:' req.params.userid);
} );
この例では、 '/users/123'にget requestが行われると、サーバーは「ユーザーID:123」で応答します。 Express 4?
この例では、「public」ディレクトリ内のファイルはルートURL( '/')から直接アクセスできます。 🎜>
Express 4でボディパーサーミドルウェアを使用するにはどうすればよいですか?
app.use(bodyparser.urlencoded({extended:true}) );
この例では、ボディパーサーのミドルウェアは、JSONとURLエンコードされたボディを解析するように構成されています。 Express 4の404エラーを処理しますか?
ミドルウェアスタックの最後にミドルウェア関数を追加することで、404エラーを処理できます。他のルートハンドラーやミドルウェア関数がリクエストを処理していない場合、この関数は実行されます。例は次のとおりです。
app.use(function(req、res、next){
以上がExpress 4でRESTFUL APIを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。