[解決済み】express.jsのapp.useとapp.getの違いについて
質問
expressとnode.jsの初心者なんですが、app.useとapp.getの違いがわかりません。情報を送るにはどちらも使えるような気がするのですが。例えば
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
は、これと同じようなものだと思われます。
app.get('/', function (req,res) {
res.send('Hello');
});
解決方法は?
app.use()
はバインドするためのものです
ミドルウェア
をアプリケーションに追加します。また
path
は、"です。
マウント
"または"
接頭辞
というパスが要求された場合にのみ適用されるようにミドルウェアを制限しています。
開始
を使用することができます。別のアプリケーションを埋め込むことも可能です。
// subapp.js
var express = require('express');
var app = modules.exports = express();
// ...
// server.js
var express = require('express');
var app = express();
app.use('/subapp', require('./subapp'));
// ...
を指定することで
/
を"として使用します。
マウント
"パスです。
app.use()
で始まるすべてのパスに反応します。
/
はすべてであり、使用されるHTTP動詞に関係なく、です。
-
GET /
-
PUT /foo
-
POST /foo/bar
- その他
app.get()
一方、Express の一部である
アプリケーションルーティング
でリクエストされたときに、特定のルートをマッチングして処理するためのものです。
GET
HTTP動詞
-
GET /
そして、この例と同等のルーティングは
app.use()
は実際にはこうなります。
app.all(/^\/.*/, function (req, res) {
res.send('Hello');
});
( 更新:違いをよりよく示すことを試みています。 )
などのルーティングメソッドは
app.get()
は、リクエストに対するレスポンスをより正確に調整するのに役立つ便利なメソッドです。また、以下のような機能のサポートが追加されています。
パラメータ
と
next('route')
.
それぞれの中に
app.get()
は
app.use()
を使用することで、これらすべてを確実に行うことができます。
app.use()
を直接使用することができます。しかし、そうすると、多くの場合、(おそらく不必要に)様々な定型的なコードを再実装する必要があります。
例を挙げます。
-
シンプルで静的なルート用。
app.get('/', function (req, res) { // ... });
vs.
app.use('/', function (req, res, next) { if (req.method !== 'GET' || req.url !== '/') return next(); // ... });
-
同じルートに対して複数のハンドラを持つ
app.get('/', authorize('ADMIN'), function (req, res) { // ... });
vs.
const authorizeAdmin = authorize('ADMIN'); app.use('/', function (req, res, next) { if (req.method !== 'GET' || req.url !== '/') return next(); authorizeAdmin(req, res, function (err) { if (err) return next(err); // ... }); });
-
パラメータ付き。
app.get('/item/:id', function (req, res) { let id = req.params.id; // ... });
vs.
const pathToRegExp = require('path-to-regexp'); function prepareParams(matches, pathKeys, previousParams) { var params = previousParams || {}; // TODO: support repeating keys... matches.slice(1).forEach(function (segment, index) { let { name } = pathKeys[index]; params[name] = segment; }); return params; } const itemIdKeys = []; const itemIdPattern = pathToRegExp('/item/:id', itemIdKeys); app.use('/', function (req, res, next) { if (req.method !== 'GET') return next(); var urlMatch = itemIdPattern.exec(req.url); if (!urlMatch) return next(); if (itemIdKeys && itemIdKeys.length) req.params = prepareParams(urlMatch, itemIdKeys, req.params); let id = req.params.id; // ... });
注:Expressのこれらの機能の実装は、その中に含まれています。
Router
,Layer
およびRoute
.
関連
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] express.Routerとapp.getの違い?
-
[解決済み] -saveと-save-devの違いは何ですか?
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] express.js で HTTPS を有効にする
-
[解決済み] "require(x)" と "import x" の違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】エラー TRK0005: 位置特定に失敗しました。"CL.exe"
-
[解決済み】Nodejsの解決方法:Error: ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み】モジュール '@babel/core' が見つかりません。
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み] Node.jsのホスト名/IPが証明書のaltnamesと一致しない
-
[解決済み] ExpressJS : res.redirect()が期待通りに動作しない?
-
[解決済み] エラーです。Cannot find module 'ejs'
-
[解決済み] Mongoose Schema がモデルとして登録されていません。
-
[解決済み】NodeJS / Express: "app.use "とは何ですか?