@femalemoustache

Как получить доступ к get-параметру внутри модуля?

Пишу простой модуль постраничной навигации для приложения на Express.js:

var config = require('../config');

function Pagination(options) {
    this.param  = options.param || 'page';
    //this.current = ?
    this.perPage = options.perPage || config.perPage;
    this.numPages = Math.ceil(options.numRows / this.perPage);
    this.prevPage = null;
    this.nextPage = null;
    this.hasPrevPage = function() {
        return (this.current > 1 && this.numPages);
    }
    this.hasNextPage = function() {
        return (this.numPages > this.current);
    }

    if (this.hasPrevPage()) {
        this.prevPage = this.current - 1;
    }

    if (this.hasNextPage()) {
        this.nextPage = this.current + 1;
    }
}

module.exports = Pagination;


В this.current мне нужно получить значения параметра, передающего страницу в постраничной навигации. Например для урла /posts/?page=3 this.current должно быть 3.

Пример применения модуля:

var express       = require('express');
var Pagination    = require('../core/pagination');
var config        = require('../config');

var router = express.Router();

router.get('/', function(req, res) {
    //...
    pagination = new Pagination({
        numRows: dbresult.count
    });

    res.render('posts', {posts: dbresult.rows, pagination: pagination});
});


Я знаю, что можно получить значение параметра внутри обработчика роута и передавать в качестве аргумента в конструктор Pagination. Я хочу, чтобы модуль получал значение сам, без необходимости каждый раз передавать его из кода в обработчике роута.
  • Вопрос задан
  • 195 просмотров
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
Если я правильно понял вашу идею то вам нужно реализовать middleware
внедрив глобально для всех запросов или где укажите явно,

если обернуть текущий получится примерно так:
function pagination(req, res, next) {
    var page = parseInt(req.params.page) || 1;
       req.pagination = new Pagination ({ 
          page: page,
});
}

router.get('/', pagination,function(req, res) {
....
 req.pagination.numRows = dbresult.count;
 res.render('posts', {posts: dbresult.rows, pagination: req.pagination});

});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Rabinzon
router.get('/page-:page', function(req, res, next) {
      parseInt(req.params.page) 
});

req.params.page - это то что вам нужно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект