난 그냥 표현에 대한 설명서를 읽고,이 두 용어를 발견했다 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 메서드에 따라 다음 줄을 실행합니다.