Как использовать промежуточное ПО в nodejs контроллере? - PullRequest
0 голосов
/ 29 апреля 2020

Мне удалось заставить все это работать, если я вставил промежуточное программное обеспечение в маршрут следующим образом:

router.get('/', paginatedResults(Flight), (req, res) => {
    res.json(res.paginatedResults);
});

, но я хотел бы использовать функцию промежуточного программного обеспечения в моем контроллере, которая будет передана в Маршрутизатор вроде

контроллер. js

// @desc   Get all flights
// @route  GET /api/v1/flights
// @access Public
exports.getFlights = paginatedResults(Flight), (req, res) => {
    res.json(res.paginatedResults)
};

маршрутизатор. js

router.route('/').get(getFlights);

paginatedResults. js

exports.paginatedResults = (model) => {
    return async (req, res, next) => {
        const page = parseInt(req.query.page);
        const limit = parseInt(req.query.limit);

        const startIndex = (page - 1) * limit;
        const endIndex = page * limit;

        const results = {};

        if (endIndex < (await model.countDocuments().exec())) {
            results.next = {
                page: page + 1,
                limit: limit,
            };
        }

        if (startIndex > 0) {
            results.previous = {
                page: page - 1,
                limit: limit,
            };
        }

        try {
            results.results = await model
                .find()
                .limit(limit)
                .skip(startIndex)
                .exec();
            res.paginatedResults = results;
            next();
        } catch (e) {
            res.status(500).json({ msg: e.message });
        }
    };
};

Где в функции контроллера я должен поместить промежуточное программное обеспечение paginatedResults ()? Или это должно идти в роутере?

Спасибо!

...