[node.js] Express에서 app.use ()와 router.use ()의 차이점

난 그냥 표현에 대한 설명서를 읽고,이 두 용어를 발견했다 app.use();router.use();

나는 경로에 미들웨어app.use();마운트하기 위해 노드 에서 사용된다는 것을 알고 있으며 대부분의 노드 앱에서 종종 사용합니다. 그러나 router.use();둘 다 같은 것은 무엇 입니까? 그렇지 않다면 차이점은 무엇입니까?

여기서 라우터에 대해 읽었습니다 . 또한 비슷한 질문을 찾았습니다. “express.Router”와 “app.get”을 사용한 라우팅의 차이점은 무엇입니까?
app.all ( ‘*’)과 app.use ( ‘/’)의 차이점은 있지만 실제로 내 질문에 대답하지 않습니다. 감사.



답변

router.get하위 경로를 정의하기위한 것입니다. 이 예를 고려하십시오.

var router = express.Router();

app.use('/first', router); // Mount the router as middleware at path /first

router.get('/sud', smaller);

router.get('/user', bigger);
  • 당신이 열 경우 / 최초 / 타운은 , 그 smaller함수가 호출 얻을 것이다.
  • 당신이 열 경우 / 처음으로 / 사용자는 다음 bigger함수가 호출 얻을 것이다.

간단히 말해서 app.use('/first', router)경로 / first에 미들웨어를 마운트 한 다음 router.get그에 따라 하위 경로 를 설정합니다.


그러나 대신 다음을 사용하면 :

app.use('/first', fun);

app.get('/sud', bigger);

app.get('/user', smaller);
  • 브라우저에서 / first 를 열면 fun호출됩니다.
  • 들어 / 타운 , bigger전화를받을 것이다
  • 들어 / 사용자 , smaller전화를받을 것이다

그러나 / first / sud 에 대해서는 어떤 함수도 호출되지 않습니다.

이 링크도 도움이 될 수 있습니다 : http://expressjs.com/api.html#router


답변

router.use();특정 라우터에서 제공하는 경로에 대해 app.use();미들웨어를 마운트하고, 앱의 모든 경로 (또는를 사용하는 경우 지정된 경로와 일치하는 경로)에 대해 미들웨어를 마운트합니다 app.use('/ANYROUTESHERE', yourMiddleware());.

사용 사례의 예로는 표준 경로가있는 라우터 하나와 유효한 사용자가 필요한 API 경로를 처리하는 라우터 하나가있는 앱이 있습니다.

그런 다음 .NET으로 만 api 라우터에 대한 인증 미들웨어를 마운트합니다 router.use(yourAuthMiddleware());.

모든 경로에 유효한 사용자가 필요한 앱이있는 경우 다음을 사용하여 앱용 미들웨어를 마운트합니다. app.use(yourAuthMiddleware());


답변

app.use () 사용하여 지정된 경로에 미들웨어 함수를 마운트합니다. 요청한 경로의베이스가 경로와 일치 할 때 미들웨어 함수가 실행됩니다.

router.use ()는 미들웨어 기능에 사용됩니다. 기본 마운트 경로는“/”입니다.

그러나 app.use ()에서는 다음과 같이 지정된 경로를 제공해야합니다.

 var adsRouter = require('./adsRouter.js');
    app.use('/ads', adsRouter);

또는

app.use('/ads', function(req, res, next) {

  // write your callback code here.

    });

그러나 router.use ()를 사용하는 동안 다음과 같이 미들웨어 만 제공 할 수 있습니다.

router.use(function(req, res, next) {
  console.log('%s %s %s', req.method, req.url, req.path);
  next();
});

또는

router.use('/test', function(req, res, next) {
  // write your callback code here.
  next();
});

또는

//in router.js

router.use('/admin', authUtil.verifySessionId, authUtil.verifyLisencee);
router.post('/admin', controllerIndex.ads.adListingAdmin);

위의 코드에서 끝 점이 ‘/ admin’이면 먼저 authUtil.verifySessionId 및 authUtil.verifyLisencee를 호출 한 다음 ‘admin’끝점과 controllerIndex.ads.adListingAdmin 메서드에 따라 다음 줄을 실행합니다.


답변