[node.js] / login을 제외한 모든 경로를 잡아라

저는 현재 사용자가 각 요청의 헤더에 인증 토큰을 전달해야하는 API를 작성 중입니다. 이제 포괄 경로를 만들 수 있다는 것을 알고 있습니다.

app.get('/*', function(req,res){

});

하지만 /login또는 같은 특정 경로를 제외하도록 어떻게 만들지 궁금합니다 /.



답변

사용자가 /login또는 /에 액세스 할 때 어떤 일이 발생하고 싶은지 잘 모르겠지만 별도의 경로를 만들 수 있습니다. catch-all 전에 선언하면 들어오는 요청을 처리 할 때 첫 번째 딥이 발생합니다.

app.get('/login', function(req, res) {
  ...
});

app.get('/', function(req, res) {
  ...
});

app.get('*', function(req, res) {
  ...
});


답변

제외하려는 경로 뒤에 항상 포괄 경로를 배치 할 수 있습니다 ( robertklep 답변 참조 ).

그러나 때로는 경로의 순서에 관심이 없을 때가 있습니다. 이 경우에도 원하는 작업을 수행 할 수 있습니다.

app.get('*', function(req, res, next) {
  if (req.url === '/' || req.url === '/login') return next();
  ...
});


답변

모든 요청에서 자격 증명 또는 신뢰성을 확인하려면 Express Routing 기능 “all”을 사용해야합니다. 다음과 같이 사용할 수 있습니다.

app.all('/api/*', function(req, res, next){
    console.log('General Validations');
    next();
});

라우팅 항목 앞에 배치 할 수 있습니다.

이 경우 “/ api / “를 경로로 사용 했으므로 “/ 했으므로 필요에 맞게 “를 .

여기 누군가를 돕는 것이 너무 늦지 않았기를 바랍니다.


답변

포괄적 인 경로 처리기를 만드는 또 다른 방법은 다음과 같습니다.

app.get('/login', function(req, res) {
  //... login page
});
app.get('/', function(req, res) {
  //...index page
});
app.get('/:pageCalled', function(req, res) {
  console.log('retrieving page: ' + req.params.pageCalled);
  //... mypage.html
});

이것은 robertklep의 (허용되는) 답변과 똑같이 작동하지만 사용자가 실제로 요청한 것에 대한 자세한 정보를 제공합니다. 이제 req.params.pageCalled요청되는 페이지를 나타내는 슬러그 가 있으며 여러 페이지가있는 경우 사용자를 적절한 페이지로 안내 할 수 있습니다.

하나 gotchya는,이 방법 (들으 @agmin)에 대한 조심하는 /:pageCalled단 하나와 경로를 잡을 것입니다 /당신이 얻을되지 않도록, /route/1같은 등을 사용하여 추가 슬러그 /:pageCalled/:subPageCalled더 페이지 (들으 @softcode)


답변