Programing

/ login을 제외한 모든 경로 포착

crosscheck 2020. 11. 10. 07:51
반응형

/ 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요청되는 페이지를 나타내는 슬러그 가 있으며 여러 페이지가있는 경우 사용자를 적절한 페이지로 안내 할 수 있습니다.

One gotchya to watch out for (thx @agmin) with this approach, /:pageCalled will only catch routes with a single /, so you will not get /route/1, etc. Use additional slugs like /:pageCalled/:subPageCalled for more pages (thx @softcode)

참고URL : https://stackoverflow.com/questions/19313016/catch-all-route-except-for-login

반응형