https://github.com/WesleySoeiro/ProjetoBD
Segue o link do meu projeto estável.
Estou tentando criar um middleware de paginação para juntar as informações deste curso com o anterior de API rest.
fiz algo nesse sentido:
Middleware
const NaoEncontrado = require("../erro/NaoEncontrado.js");
async function paginar(req, res, next) {
  try {
    let { limite = 2, pagina = 1, ordenacao = "_id:-1" } = req.query;
    let [campoOrdenacao, ordem] = ordenacao.split(":");
    ordem = ordem === "1" ? "ASC" : "DESC";
    if (isNaN(Number(limite)) || isNaN(Number(pagina))) {
      res.status(400).json({ mensagem: "Os valores devem ser um numéricos" });
    }
    if (limite < 1 || pagina < 1) {
      res.status(400).json({
        mensagem: "Os valores de limite e pagina devem ser maiores que 0",
      });
    }
    Object.entries(req.query).forEach(([chave, valor]) => {
      if (!chave || valor.trim() === "") {
        res.status(400).send("Parametros inválidos.");
      }
    });
    const resultado = req.resultado;
    const resultadoPaginado = await resultado.findAll({
      limit: limite,
      offset: (pagina - 1) * limite,
      order: [[campoOrdenacao, ordem]],
    });
    if (resultadoPaginado.length > 0) {
      return res.status(200).json(resultadoPaginado);
    } else {
      return next(new NaoEncontrado("Não há mais dados para listar."));
    }
  } catch (erro) {
    console.log(erro);
    next(erro);
  }
}
module.exports = paginar;
Services
const { where } = require("sequelize");
const dataSource = require("../database/models");
class Services {
  constructor(model) {
    this.model = model;
  }
  async getAll(req, res, next) {
    const resultado = dataSource[this.model].findAll();
    req.resultado = resultado;
    next();
  }
  
  ....
Controller
const { Op } = require("sequelize");
const CamposVazios = require("../erro/CamposVazios.js");
const ErroValidacao = require("../erro/ErroValidacao.js");
const NaoEncontrado = require("../erro/NaoEncontrado.js");
const filtro = require("../helpers/filtro.js");
class Controller {
  constructor(entidadeService) {
    this.entidadeService = entidadeService;
  }
  async getAllRegisters(req, res, next) {
    try {
      const listarRegistros = await this.entidadeService.getAll(req, res, next);
    } catch (erro) {
      console.log(erro);
      next(new NaoEncontrado());
    }
  }
  
  ...
Routes
const routes = require("express").Router();
const ProdutosController = require("../controllers/ProdutosController.js");
const paginar = require("../middlewares/paginar.js");
const produtosController = new ProdutosController();
routes
  .get(
    "/produtos",
    async (req, res, next) =>
      await produtosController.getAllRegisters(req, res, next),
    paginar
  )
Erro
Server is running on port 3000
TypeError: resultado.findAll is not a function
    at paginar (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\src\middlewares\paginar.js:27:47)
    at Layer.handle [as handle_request] (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\node_modules\express\lib\router\route.js:149:13)
    at ProdutosServices.getAll (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\src\services\Services.js:12:5)
    at ProdutosController.getAllRegisters (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\src\controllers\Controller.js:14:58)
    at C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\src\routes\produtosRoutes.js:11:32
    at Layer.handle [as handle_request] (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\node_modules\express\lib\router\route.js:149:13)
    at Route.dispatch (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\node_modules\express\lib\router\route.js:119:3)
    at Layer.handle [as handle_request] (C:\Users\wesle\OneDrive\Área de Trabalho\Projeto DB\Projeto\node_modules\express\lib\router\layer.js:95:5)
Eu percebi que na paginação resultados traz o objeto, como limitar o objeto que é recebido na area de paginação?
 
             
            