[Node.js] Express - Router
Routing
すなわち、クライアントがどのように要求し、どのように応答を送信するかの定義です.
以前は
app.get()
の方法でルーティングを体験したことがある.公式サイトで提供されている例を簡単に見ることができます.var express = require('express');
var app = express();
// respond with "hello world" when a GET request is made to the homepage
app.get('/', function(req, res) {
res.send('hello world');
});
Router
モジュール化された取り付け可能なハンドルという言葉は理解しにくいが,簡単に言えばルータオブジェクト(ルーティングを助けるオブジェクト)を「モジュール」と理解し,必要な場所でロードして使用できるように理解できる.
ExpressのRouterオブジェクトはMiddlewareに基づいて実装されているため、Middlewareと同じ方法で使用されます.
上記の例で示した
app.get()
の方法でルーティングを行う場合、1つのjsファイル内ですべてのルーティングを処理する必要がある.ただし、express.Router
クラスは「Middleware」であるため、jsファイルをパスごとに作成してルータを管理することができます.これにより、コードの可読性が向上し、メンテナンスが容易になります.前回のレッスンで作成した例に簡単に追加すると、理解に役立つかもしれません.
// ./routes/goods.js
// * routes 폴더에 goods.js 파일을 생성하였다.
// * 즉, 현재 경로는 '/routes/goods.js 이다.
// Express에서 제공하는 Router 클래스를 사용하여 객체를 만들기 위해,
// require를 사용하여 Express를 import 한다.
const express = require('express');
// Router 클래스를 호출하고 변수에 담아주면서, router 객체를 생성해준다.
const router = express.Router();
// app.js 파일에서는 이 router를 '/api' 주소와 매칭시켰기 때문에,
// 아래의 요청 경로는 '/api' 뒤에 붙는 경로임을 확인하여야 한다.
// '/api/' 경로로 들어오면 'this is root page'가 출력되도록 응답한다.
router.get('/', (req, res) => {
res.send('this is root page');
});
// '/api/goods' 경로로 들어오면 'this is goods page'가 출력되도록 응답한다.
router.get('/goods', (req, res) => {
res.send('this is goods page');
});
// 생성한 router를 모듈로 내보내준다.
// 즉 app.js에서 실행할 수 있도록, export 한다.
// export 하지 않으면, app.js 에서 router를 호출할 수 없게 된다.
module.exports = router;
// --------------------------------------
// ./app.js
// app을 실제로 실행하는 js파일
// require: 모듈을 찾아서 import 한다.
const express = require('express');
const app = express();
const port = 8080;
// good.js에서 만들어준 router를 사용하기 위해, require를 사용해서 import 한다.
// Express에서 제공하는 Router 클래스는 모듈로 사용이 가능하다고 했기 때문에,
// require를 통해 import하여 사용할 수 있다.
// require 안에서 .js 확장자는 생략이 가능하다.
const goodsRouter = require('./routes/goods');
const requestMiddleware = (req, res, next) => {
console.log(`Request URL: ${req.originalUrl}, ${new Date()}`);
next();
};
app.use(requestMiddleware);
// Router 객체는 Middleware와 동일하게 사용되기 때문에,
// app.use를 통해 사용할 수 있다.
// router는 여러개 정의할 수 있다.
// 즉, goodsRouter 외에 다른 router를 배열에 담아주면
// 해당 배열 안에 있는 router들을 순회하며 매칭되는 경로의 응답을 수행한다.
app.use('/api', [goodsRouter]);
app.get('/', (req, res) => {
res.send('Hello Express!');
});
app.listen(port, () => {
console.log(`Server Started with port ${port}`);
});
パスによる応答結果
localhost.8080/
localhost:8080/api
localhost:8080/api/goods
Reference
この問題について([Node.js] Express - Router), 我々は、より多くの情報をここで見つけました https://velog.io/@_nine/Node.js-Express-Routerテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol