2015-10-15 3 views
0

В коде ниже, я надеюсь получить функциональность в состоянии поразить URLS: localhost:3000/verify, localhost:3000/verify/<value> и localhost:3000/verify?hmac=<value>nodejs expressjs маршрут с параметрами обратного вызова, не стреляя

Однако, с этим кодом, единственное, что работы - средний вариант. Что я делаю неправильно, чтобы сделать эту работу маршрутизации так, как я ожидал?

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

    res.send('Hello World!'); 
}); 



//add parameter routing 
app.param('hmac', function(req, res, next, hmacvalue) { 

    console.log("HMAC route hit " + hmacvalue); 
    return next(); 

}); 

app.get('/verify/:hmac',function(req,res,next) { 
    console.log("I'm in the verify route"); 
}); 
+0

Я немного запутался, вы добавить маршруты для двух других, или это единственный путь? Если последний, этот маршрут явно не соответствует всем трем вариантам, только средний? – adeneo

+0

Это размер моего кода. Я более или менее следую коду здесь: http://expressjs.com/4x/api.html#app.param во втором примере. – Derek

ответ

0

Это потому, что нет определенных маршрутов, соответствующих критериям, которые вы ищете. Маршрут /verify/:hmac не соответствует маршруту /verify. Первый ищет шаблон, ожидающий значения вместо :hmac.

Попробуйте следующее

app.get('/verify',function(req, res, next) { 
    console.log("I'm in the /verify route!"); 
    console.log(req.query.hmac + " I am the /verify?hmac=<>!"); 
}); 

Рассмотрим чтение документации маршрутизации Экспресс здесь: http://expressjs.com/guide/routing.html

+0

Хорошо. Я могу попробовать. Что мне не хватает в отношении предполагаемого использования app.param? – Derek

+1

Я использовал 'app.param', когда мне понадобилось больше всего типа« catch-all », когда я имел дело с несколькими маршрутами с аналогичными параметрами. Это не нужно в вашем случае, и я не часто его использую. –

0

Маршрут /verify/:hmac соответствует только URL, в формате localhost:3000/verify/<value>.

Если вы хотите, чтобы поймать все URL, вы должны добавить маршруты для них

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

    if (req.query && req.query.hmac) { 
     console.log('localhost:3000/verify?hmac=<value>'); 

     var hmac = req.query.hmac; 
    } else { 
     console.log('localhost:3000/verify'); 
    } 
}); 

app.get('/verify/:hmac', function(req, res, next) { 
    var hmac = req.params.hmac; 
});