1. ホーム
  2. node.js

[解決済み] express.Routerとapp.getの違い?

2022-02-17 20:06:03

質問

NodeJS と Express 4 を使い始めたのですが、少し混乱しています。Express の Web サイトを読みましたが、次のような記述が見当たりません。 いつ を使用するのか、また、ルートハンドラを使用するのか。 express.Router .

このように、もしユーザーが /show を使用する必要があります。

var express = require('express')    
var app = express()    
app.get("/show", someFunction)  

当初、これは古い(Express 3用)ものだと思っていました。それともExpress 4でもこの方法なのでしょうか?

もし、Express4でこの方法なら、何が express.Router に使用されるのですか?

上記とほぼ同じ例を読みましたが、この例では express.Router :

var express = require('express');
var router = express.Router();
router.get("/show", someFunction)

では、両者の例の違いは何でしょうか?

簡単なテストサイトだけなら、どちらを使えばいいのでしょうか?

どのように解決するのですか?

app.js

var express = require('express'),
    dogs    = require('./routes/dogs'),
    cats    = require('./routes/cats'),
    birds   = require('./routes/birds');

var app = express();

app.use('/dogs',  dogs);
app.use('/cats',  cats);
app.use('/birds', birds);

app.listen(3000);

dogs.js

var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {
    res.send('GET handler for /dogs route.');
});

router.post('/', function(req, res) {
    res.send('POST handler for /dogs route.');
});

module.exports = router;

いつ var app = express() が呼び出されると、アプリオブジェクトが返されます。これは メインアプリ .

いつ var router = express.Router() が呼び出されると、少し変わった ミニアプリ が返されます。の背後にある考え方は ミニアプリ は、アプリ内の各ルートが非常に複雑になる可能性があり、そのコードをすべて別のファイルに移動させることが有益であることを示します。各ファイルのルーターは ミニアプリ と非常によく似た構造を持っています。 メインアプリ .

上記の例では /dogs ルートは独立したファイルに移動されました。 メインアプリ . のコードは /猫 /鳥 は、それぞれのファイルで同じような構造になっているはずです。このコードを3つの ミニアプリ 他の2つのロジックへの影響を気にすることなく、それぞれのロジックを単独で作業することができます。

3つのルートすべてに関わるコード(ミドルウェア)がある場合、それを メインアプリ の前、つまり app.use(...) を呼び出します。もし、これらのルートのうちの1つだけに関係するコード(ミドルウェア)がある場合は、そのルート専用のファイルに入れることができます。