2013-07-21 1 views
0

В экспрессе,Append (строка запроса) параметры для текущего URL

Пусть я в http://localhost:3000/search?q=foo&sort=asc

В моем шаблоне, как я могу напечатать ссылку (скажет следующая ссылка нумерации страниц) с дополнительными параметры:

search.dust

<a rel="next" href="{! append page=2 !}">Next results</a> 

-

Конечно, я мог бы:

<a rel="next" href="{currentUrl}&page=2">Next results</a> 

, но это не будет работать, когда я в http://localhost:3000/search, из-за проблемы ?/&.

Спасибо

+0

Это должно работать на стороне клиента: [Как добавить параметры в URL, который уже содержит другие параметры, и возможно якорь] (http://stackoverflow.com/questions/6953944/how-to-add-parameters-to-a-url-that-already-contains-other-parameters-and-maybe). Может быть, вы могли бы адаптировать его для работы на экспресс-маршруте или в шаблоне? –

ответ

2

Я made a dust helper для этого. Я назвал его {@query} и вот его подпись:

{@query string="que=ry&str=ing"/} 

Он объединяет que=ry&str=ing с реальными req.query параметрами, что и в предыдущем примере, где мы были на http://localhost:3000/search?q=foo&sort=asc:

<a rel="next" href="?{@query string="page=2"/}">Next</a> 

выведет:

<a rel="next" href="?q=foo&sort=asc&page=2">Next</a> 

-

Реализация нижеследовал (внутри промежуточного слоя, чтобы иметь доступ к req.query):

var dust = require('dustjs-linkedin'); 
var _ = require('underscore'); 
var qs = require('querystring'); 
app.use(function(req, res, next) { 
    // 
    // Query helper for dust 
    // 
    // Merge querystring parameters to the current req.query 
    // 
    // Suppose we are on localhost:3000/search?q=foo : 
    // - {@query string=""/} will output q=foo 
    // - {@query string="bar=baz"/} will output q=foo&bar=baz 
    // - {@query string="q=fooo&bar=baz"/} will output q=fooo&bar=baz (notice fooo takes precedence) 
    // 
    dust.helpers.query = function (chunk, ctx, bodies, params) { 
    var str = dust.helpers.tap(params.string, chunk, ctx); 

    // Parse string="" parameter 
    var o = qs.parse(str); 

    // Merge with req.query 
    o = _.extend({}, req.query, o); 

    return chunk.write(qs.stringify(o)); 
    } 

    next(); 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^