2015-11-15 4 views
0

Я пишу простой модуль разбивки на страницы для моего экспресс-приложения. Вот код:Как получить доступ к параметру запроса в модуле node.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; 

Один из вариантов свойств паров. Это имя параметра запроса запроса, и по умолчанию это «страница». Например, если маршрут:

/posts/?page=3 

pagination.current наборы для 3

Я предполагаю, что с помощью этого модуля в мое приложение должно выглядеть так

app.js:

//... 
var postsRoute = require('./routes/posts'); 
app.use('/posts', postsRoute); 

(/routes/posts.js):

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, 
     perPage: config.perPage 
    }); 

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

Так что если модуль знает, что такое имя параметра разбиения на страницы, он должен иметь возможность получить его значение. Как сделать это прямо внутри модуля, а не внутри каждого маршрута? Желательно использовать только базовые функции узла.

+0

Вы не показывают фактическую запуск вашего экспресс-сервера и подключения маршрутизатора в этом. – jfriend00

+0

@ jfriend00 Отредактировано. Но я не думаю, что это действительно необходимо. Я хочу получить доступ с любого запроса, а не по одному маршруту. Например, в php мы имеем массив $ _REQUEST, доступный везде. Я прошу что-то вроде этого для node.js, а не для одного экспресс-маршрута или даже для выражения фреймворка. – femalemoustache

ответ

1

Используйте req.query.page, чтобы получить 3. Другими словами,

router.get('/posts', function(req, res) { 
    var page = req.query.page // = 3 
+0

Я знаю, как получить параметр запроса внутри маршрута. Я хочу, чтобы все было правильно в моем модуле, для любого маршрута. – femalemoustache

+0

@ femalemoustache - параметр запроса ТОЛЬКО действует в рамках данного запроса. Он не существует вне конкретного запроса. PHP работает по-разному. – jfriend00

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