[node.js] express.Router와 app.get의 차이점은 무엇입니까?

NodeJS와 Express 4로 시작하고 약간 혼란 스럽습니다. Express 웹 사이트를 읽었지만 라우트 핸들러 사용시기 또는 사용 시기 를 볼 수 없습니다 express.Router.

내가 볼 수 있듯이 사용자가 방문했을 때 페이지 또는 무언가를 보여주고 싶다면 다음을 /show사용해야합니다.

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

처음에는 이것이 오래되었다고 생각했습니다 (Express 3의 경우). 이것이 맞습니까 아니면 이것이 Express 4의 길입니까?

이것이 Express 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);

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 경로 의 코드 는 자체 파일로 이동되어 기본 앱을 어지럽히 지 않습니다 . / cats/ birds 의 코드는 자체 파일에서 유사하게 구성됩니다. 이 코드를 3 개의 미니 앱 으로 분리하면 각각의 논리를 따로 따로 작업 할 수 있으며 다른 두 가지에 어떤 영향을 줄지 걱정하지 않아도됩니다.

세 경로 모두와 관련된 코드 (미들웨어)가 있는 경우 통화 전에 기본 앱 에 넣을 수 있습니다 app.use(...). 해당 경로 중 하나와 관련된 코드 (미들웨어)가있는 경우 해당 경로의 파일에만 코드를 넣을 수 있습니다.


답변

Express 4.0은 새로운 라우터와 함께 제공됩니다. 사이트에서 언급했듯이 :

express.Router 클래스를 사용하여 모듈 식 마운트 가능 경로 처리기를 만들 수 있습니다. 라우터 인스턴스는 완전한 미들웨어 및 라우팅 시스템입니다. 이러한 이유로 종종 “미니 앱”이라고합니다.

https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4에 좋은 기사 가 있으며, 라우터와의 차이점과 수행 할 수있는 작업을 설명합니다.

요약

라우터를 사용하면 코드를보다 쉽게 ​​모듈화 할 수 있습니다. 라우터를 다음과 같이 사용할 수 있습니다.

  1. 기본 경로 : 홈, 정보
  2. 콘솔에 요청을 기록하도록 미들웨어 라우팅
  3. 매개 변수가있는 경로
  4. 특정 매개 변수의 유효성을 검사하기 위해 매개 변수 용 경로 미들웨어
  5. 특정 경로로 전달 된 매개 변수의 유효성을 검사합니다

노트 :

app.router익스프레스 4 제거 하였다 목적은, 그 응용 프로그램은 명시 적으로로드했다 익스프레스 3와 달리, 기지국 고속 라우터에 단지 참조되면, 새로운 버전 익스프레스 5에 복귀했다.


답변

app.route('/book')
  .get(function (req, res) {
    res.send('Get a random book')
  })
  .post(function (req, res) {
    res.send('Post a random book')
  })

위의 예와 같이 경로 아래에 다른 HTTP 요청 방법을 추가 할 수 있습니다.


답변

응용 프로그램이 약간 복잡하다고 가정 해 봅시다. 따라서 우리가 가장 먼저하는 일은 하나의 모듈에서 변경이 다른 모듈을 혼란스럽게하지 않고 개별 모듈에서 계속 작업 할 수 있도록 응용 프로그램을 여러 모듈로 나누는 것입니다. 그러나 하루가 끝나면 모든 것을 하나로 통합해야합니다. 단일 응용 프로그램을 구축하고 있습니다. 마치 하나의 기본 응용 프로그램과 부모가 기본 응용 프로그램 인 자식 응용 프로그램이 거의없는 것과 같습니다. 부모 응용 프로그램을 만들 때

var express = require('express');
var parent = express();

그리고이 부모 신청서에 우리는 자녀 신청서를 가져와야합니다. 그러나 자식 응용 프로그램은 완전히 다른 응용 프로그램이 아니기 때문에 (동일한 자바 용어로 실행되므로) Express는 Expresse의 라우터 기능을 사용하여 수행 할 수있는 방법을 제공하며 이는 각 자식 모듈 파일에서 수행하는 작업입니다. aboutme 와 같은 하위 모듈 중 하나를 호출 할 수 있습니다 .

var express = require('express');
var router = express.Router();
/**
** do something here
**/
module.exports = router;

으로 module.exports 우리가 소비하는 우리가 일을 모듈화했기 때문에 우리는 모듈이 노드의 수단에 의해 부모 응용 프로그램에서 사용할 파일을 만들 필요가 다른 모든 타사 모듈과 부모 파일 외모와 같은 기능을 필요로하는 다른이 모듈을 이용할 수있게된다 이 같은.

var express = require('express')
var parent = express()
var child = require(./aboutme)

이 자식 모듈을 부모가 사용할 수있게 한 후에는이 자식 응용 프로그램을 언제 사용할 것인지 부모 응용 프로그램에 알려야합니다. 사용자가 경로에 도달하면 요청을 처리하기 위해 나에 대한 자식 응용 프로그램이 필요하며 Expresse의 use 메소드를 사용하여 수행한다고 가정 해 봅시다 .

parent.use('/aboutme',  aboutme);

그리고 한 번에 부모 파일은 다음과 같습니다

var express = require('express');
var parent = express();
var child = require(./aboutme);
/***
**do some stuff here
**/
parent.use('/aboutme',child);

무엇보다도 부모가 할 수있는 일은 자식이 할 수없는 서버를 시작할 수 있다는 것입니다. 이것이 분명히되기를 바랍니다. 자세한 내용은 항상 시간이 걸리지 만 많은 정보를 제공하는 소스 코드를 볼 수 있습니다. 감사합니다.


답변

app.js를 사용하여 경로를 작성한다는 것은 app.js가 응용 프로그램 시작시로드 될 때 모든 사용자가 액세스 할 수 있음을 의미합니다. 그러나 express.router () 미니 앱에 경로를 설정하면 액세스 가능성을 보호하고 제한 할 수 있습니다.


답변

express.Router 많은 옵션이 있습니다 :

  • 대소 문자 구분 가능 : /showroute와 동일하지 않음 /Show.이 동작은 기본적으로 비활성화되어 있습니다.
  • 엄격한 라우팅 모드 : /show/와 동일하지 않은 라우팅 /show,이 동작은 기본적으로 비활성화되어 있습니다
  • 특정 경로에 특정 미들웨어를 추가 할 수 있습니다

답변

한마디 로 미들웨어와 express.Router비교할 때 더 많은 일을 할 app.get()수 있습니다.express.Router()