급행 간의 차이입니다.라우터와 앱.get?
NodeJS와 Express 4부터 시작하는데, 조금 혼란스럽습니다.Express 웹 사이트를 읽고 있지만 경로 핸들러를 사용할 때 또는 사용할 때를 볼 수 없습니다.express.Router
.
제가 볼 수 있듯이, 사용자가 를 누를 때 페이지나 다른 것을 표시하려면/show
예를 들어 다음을 사용해야 합니다.
var express = require('express')
var app = express()
app.get("/show", someFunction)
처음에는 (익스프레스 3의) 오래된 것이라고 생각했습니다.그게 맞나요, 아니면 4번 고속도로도 이 길인가요?
만약 이것이 익스프레스 4에서 그것을 하는 방법이라면, 무엇입니까?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);
개.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 경로의 코드는 메인 앱을 혼란스럽게 하지 않도록 자체 파일로 이동되었습니다./cats 및 /birds의 코드는 자체 파일에서 유사하게 구성됩니다.이 코드를 세 개의 미니 앱으로 분리하면 각각의 논리를 분리하여 작업할 수 있으며, 다른 두 앱에 어떤 영향을 미칠지 걱정할 필요가 없습니다.
만약 당신이 세 경로 모두와 관련된 코드(미들웨어)를 가지고 있다면, 당신은 그것을 메인 앱에 넣을 수 있습니다.app.use(...)
호출. 이러한 경로 중 하나에만 관련된 코드(미들웨어)가 있는 경우 해당 경로에 대해서만 파일에 넣을 수 있습니다.
Express 4.0은 새 라우터와 함께 제공됩니다.사이트에 언급된 바와 같이:
급행열차.라우터 클래스를 사용하여 모듈식 마운트 가능 경로 처리기를 만들 수 있습니다.라우터 인스턴스는 완전한 미들웨어 및 라우팅 시스템입니다. 이러한 이유로 "미니 앱"이라고도 합니다.
https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 에는 차이점과 라우터로 수행할 수 있는 작업에 대해 설명하는 좋은 기사가 있습니다.
요약하자면
라우터를 사용하면 코드를 보다 쉽게 모듈화할 수 있습니다.라우터는 다음과 같이 사용할 수 있습니다.
- 기본 경로:홈, 정보
- 콘솔에 요청을 기록하도록 미들웨어 라우팅
- 매개 변수가 있는 경로
- 매개 변수용 미들웨어를 라우팅하여 특정 매개 변수의 유효성을 검사합니다.
- 특정 경로에 전달된 매개 변수의 유효성을 검사합니다.
참고:
그app.router
익스프레스 4에서 제거된 객체가 익스프레스 5에서 다시 등장했습니다.새 버전에서는 앱이 명시적으로 로드해야 했던 Express 3과 달리 기본 Express 라우터에 대한 참조일 뿐입니다.
그들
설명서를 포함한 모든 사용자는 서로 얼마나 동일한지를 다시 언급하는 경향이 있지만 실제로는 차이점을 언급하지는 않습니다.사실, 그들은 다릅니다.
var bigApp = express();
var miniApp = express.Router();
귀담아듣다
가장 명백한 차이점은bigApp
줄 것입니다.listen
를 하는 입니다.http
또는https
모듈:
var server = require('http').createServer(bigApp);
server.listen(8080, function () {
console.info(server.address());
});
저는 이것이 애초에 복잡하거나 어렵지 않았던 것을 추상화하고 모호하게 만든 다음, 사람들이 원시 http 서버를 필요로 하는 웹 소켓과 다른 미들웨어를 사용하는 것을 어렵게 만들기 때문에 안티패턴이라고 생각합니다.
내부 상태
큰 것이 말중한큰차은점이다니그,입것정요▁all다▁that▁the니rence,,라는 것입니다.bigApp
s는 별도의 내부 상태를 가집니다.
bigApp.enable('trust proxy');
bigApp.enabled('trust proxy');
// true
var bigApp2 = express();
bigApp2.enabled('trust proxy');
// false
bigApp.use('/bunnies', bigApp2);
// WRONG! '/bunnies' will NOT trust proxies
A miniApp
로넘간으로 .bigApp
지만운영하그은될것다입니것▁the다▁be것▁by입▁however니에 의해 운영될 것입니다.bigApp
내부 상태와 같은 방식으로.this
ness는 보존되고 해당 경로는 그에 따라 동작합니다.
bigApp.enable('trust proxy');
bigApp.enabled('trust proxy');
// true
var miniApp = express.Router();
bigApp.use('/bunnies', miniApp);
// CORRECT! All state and such are preserved
이것은 큰 일이 될 수 있습니다. 왜냐하면express
많은 (때로는 까다로운) 일을 합니다.http.ServerRequest
그리고.httpServerResponse
개체 - 수정(또는 납치)req.url
그리고.req.originalUrl
그리고 당신이 모르고 사용해 온 다양한 속성들 - 그리고 당신은 아마도 그것이 중복되고 분리되는 것을 원하지 않을 것입니다.
더 작은 API
작고,더잘.Router
사용 가능:
.use(mount, fn)
.all(mount, fn)
.options(mount, fn)
.head(mount, fn)
.get(mount, fn)
.post(mount, fn)
.patch(mount, fn)
.put(mount, fn)
.delete(mount, fn)
.route(mount).XXXX
.param(name, cb).XXXX
다음과 같은 몇 가지 다른 편리한 방법도 있습니다.basic()
하지만 당신은 찾을 수 없을 것입니다.set()
또는enable()
또는 더 큰 앱 상태를 변경하는 다른 방법.
app.route('/book')
.get(function (req, res) {
res.send('Get a random book')
})
.post(function (req, res) {
res.send('Post a random book')
})
위의 예와 같이 경로 아래에 다른 HTTP 요청 방법을 추가할 수 있습니다.
응용프로그램이 약간 복잡하다고 가정해 보겠습니다.먼저 애플리케이션을 여러 모듈로 분할하여 한 모듈의 변경사항이 다른 모듈을 혼란스럽게 하지 않도록 하고 개별 모듈에서 작업을 계속할 수 있도록 합니다. 그러나 마지막에는 단일 애플리케이션을 구축하기 때문에 모든 것을 하나로 통합해야 합니다.우리는 하나의 메인 애플리케이션과 부모가 메인 애플리케이션인 소수의 자식 애플리케이션을 가지고 있는 것과 같습니다.따라서 상위 응용프로그램을 만들 때 다음을 사용하여 하나를 만듭니다.
const express = require("express");
const parent = express();
그리고 이 부모 애플리케이션에는 자녀 애플리케이션을 도입해야 합니다.그러나 하위 응용 프로그램은 완전히 다른 응용 프로그램이 아니기 때문에(같은 컨텍스트 - java 용어로 실행되므로), express는 Express의 라우터 기능을 통해 이를 수행하는 방법을 제공하며 이것이 각 하위 모듈 파일에서 우리가 수행하는 것이며 다음과 같은 하위 모듈 중 하나를 호출할 수 있습니다.aboutme
.
const express = require("express");
export const router = express.Router();
타고export
우리는 이 모듈을 다른 사용자가 사용할 수 있도록 하고 있으며 모듈화된 것을 가지고 있기 때문에 다른 타사 모듈과 마찬가지로 노드의 요구 기능을 통해 상위 애플리케이션에서 모듈 파일을 사용할 수 있도록 해야 하며 상위 파일은 다음과 같습니다.
const express = require("express");
const parent = express();
const child = require("./aboutme");
부모가 이 자식 모듈을 사용할 수 있게 만든 후 부모 응용 프로그램에 이 자식 응용 프로그램을 사용할 시기를 알려주어야 합니다..aboutme
우리는 요청을 처리하기 위해 나에 대한 아동 애플리케이션이 필요하고 익스프레스를 사용하여 그것을 합니다.use
방법:
parent.use("/aboutme", child);
그리고 한 번의 샷에서 상위 파일은 다음과 같습니다.
const express = require("express");
const parent = express();
const child = require("./aboutme");
parent.use("/aboutme", child);
무엇보다도 부모가 할 수 있는 일은 자식이 할 수 없는 것처럼 서버를 시작할 수 있습니다.이것이 명확해지길 바랍니다.더 많은 정보를 위해 당신은 항상 약간의 시간이 걸리지만 그것은 당신에게 많은 정보를 제공하는 소스 코드를 볼 수 있습니다.
app.js를 사용하여 경로를 작성하는 것은 애플리케이션 시작 시 app.js가 로드되므로 모든 사용자가 경로에 액세스할 수 있음을 의미합니다.그러나 express.router() 미니 앱에 경로를 지정하면 접근성이 보호되고 제한됩니다.
마디로, 마디로한,,express.Router
에 비해 더 많은 작업을 수행할 수 있습니다.app.get()
미들웨어와 더 할 수 있습니다.express.Router()
express.Router
다음과 같은 다양한 옵션이 옵션은 다음과 같습니다.
- 소문자 구분 활성화: "/소문자 구분:
/show
경로은않과/Show
. - 모드: 엄한라팅모드:
/show/
와는다경로른과 같은/show
이 . - 특정 경로에 특정 미들웨어를 추가할 수 있습니다.
퀴즈의 질문 중 하나에서 다음과 같은 질문을 받았습니다."express.Router()
앱 개체와 비슷하게 동작하는 개체를 만듭니다."
정답은 '참'입니다.우리 둘 다 둘 중 하나를 사용하여 라우터를 만들 수 있다는 것은 알고 있지만, 모든 경우에 동일하지 않다고 해도 괜찮을까요?가 이해한 , 한,▁the면,express()
변수는 서버를 시작하는 것과 같은 더 많은 일을 할 수 있지만 다른 하나는 할 수 없습니다.
복잡한 애플리케이션에서 앱은 기사와 사용자와 같은 모듈입니다.router는 예를 들어 기사 생성 및 목록과 같은 모듈의 컨트롤러 또는 작업입니다.예: URLhttps://example.com/article/create
아티클 모듈을 구문 분석하고 라우터를 만듭니다.
또한 앱과 라우터는 레벨 인 레벨이 될 수 있습니다.
언급URL : https://stackoverflow.com/questions/28305120/differences-between-express-router-and-app-get
'programing' 카테고리의 다른 글
WPF를 배울 때 가장 이해하기 어려웠던 점은 무엇입니까? (0) | 2023.05.26 |
---|---|
기본 키와 클러스터된 인덱스의 관계 (0) | 2023.05.26 |
도커 구성: npm 설치 성공 후 볼륨에 node_modules가 없음 (0) | 2023.05.26 |
$PATH 변수에서 중복 경로 제거 (0) | 2023.05.26 |
하위 요소를 추가하기 위한 웹 구성 변환 (0) | 2023.05.21 |