title: TypeError: User.findById is not a function
body: <p>I tell you my problem. I'm with my first server; Log in fine but when trying to pass the view to index.pug I get this error.
  <strong>TypeError: User.findById is not a function</strong></p>
  
  <p>I have reviewed the code thoroughly, I found some fault and I have solved it, ... I think. The program starts session and it returns me JSON when it has registered and authenticated in the bbdd.</p>
  
  <p>This is my middleware <strong>middlewares/find_user.js</strong></p>
  
  <pre><code>const User = require('../models').User;//Modelo User
  
  module.exports = function(req,res,next){
  
    if(!req.session.userId) return next(); //Sí userId no existe next.
  
    User.findById(req.session.userId).then(user=&gt;{
        if(user){//Sí user existe,
         req.user = user;//meter valor de user en req.user, para que lo usen otros middleware.
         next();//next al siguiente middleware.
      }
    })
  };
  </code></pre>
  
  <p>This is my <strong>sessions.js</strong> controllers</p>
  
  <pre><code>const User = require('../models').User;//importamos el modelo user.js
  
  module.exports = {
    new: function(req,res){//despliega el formulario de autenticacion
      res.render('sessions/new');//renderiza la vista sessions/new.pug.
    },//en lin 5:new debe coincidir el nombre con la vista y la acccion.
    create: function(req,res){//recibe los datos del formulario para crear-
                              // la sesion y hacer el Login.
      User.login(req.body.email, req.body.password)
      .then(user =&gt; {
        if(user){//si hay usuario guardamos la sesion.
          req.session.userId = user.id;//guardar el id del user en una sesion user.Id
                                       //de la sesion UserId
        }
        res.json(user);
      })
      .catch(err=&gt;{
          console.log(err);
          res.json(err);
        })
    }
  };
  </code></pre>
  
  <p>This is my <strong>registrations.js</strong> controller</p>
  
  <pre><code>  new: function(req,res){
      res.render('registrations/new');
    },
    create: function(req,res){
      let data = {
        email: req.body.email,
        password: req.body.password
      };
  
      User.create(data).then(result=&gt;{
        res.json(result);
      }).catch(err=&gt;{
        res.json(err);
      });
    }
  };
  </code></pre>
  
  <p>Only just in case;
  My <strong>registrations_routes.js</strong>:</p>
  
  <pre><code>const express = require('express');//importamos express.
  
  let RegistrationsController = require('../controllers/registrations.js');
  let router = express.Router();//metemos en el objeto router el metodo Router de express.
  
  
  router.get('/signup',RegistrationsController.new);//ruta crear un nuevo registro/usuario.
  
  router.route('/users').post(RegistrationsController.create);
  
  module.exports = router;
  </code></pre>
  
  <p>and my <strong>sessions_routes.js</strong>:</p>
  
  <pre><code>const express = require('express');//importamos express
  
  let SessionsController = require('../controllers/sessions');//importa el-
                                                    // controlador de sessions.js
  
  var router = express.Router();//metemos en el objeto JSON router, el metodo-
                                // Router de express.
  
  router.route('/sessions')
  .get(SessionsController.new)//peticion GET.
  .post(SessionsController.create);//peticion POST.
  
  module.exports = router;//exportamos router para poder montarlo en la aplicacion.
  </code></pre>
  
  <p>My intention is to be able to redirect to the "/" view and that the mail of the person who has logged in appears, when I implement it I get that error.
  Thank you so much for everything.
   </p>
  
  <p><strong>This is my error file</strong></p>
  
  <pre><code>at module.exports (F:\Documentos Andres\Programacion\BackEnd\Proyecto3\base_datos\middlewares\find_user.js:7:8)
      at Layer.handle [as handle_request] (F:\Documentos Andres\Programacion\BackEnd\Proyecto3\base_datos\node_modules\express\lib\router\layer.js:95:5)
      at trim_prefix (F:\Documentos Andres\Programacion\BackEnd\Proyecto3\base_datos\node_modules\express\lib\router\index.js:317:13)
      at F:\Documentos Andres\Programacion\BackEnd\Proyecto3\base_datos\node_modules\express\lib\router\index.js:284:7
      at Function.process_params (F:\Documentos Andres\Programacion\BackEnd\Proyecto3\base_datos\node_modules\express\lib\router\index.js:335:12)
      at next (F:\Documentos Andres\Programacion\BackEnd\Proyecto3\base_datos\node_modules\express\lib\router\index.js:275:10)
      at Immediate._onImmediate (F:\Documentos Andres\Programacion\BackEnd\Proyecto3\base_datos\node_modules\express-session\index.js:489:7)
      at runCallback (timers.js:706:11)
      at tryOnImmediate (timers.js:676:5)
      at processImmediate (timers.js:658:5)
  </code></pre>
  
  <p>My model <strong>user.js</strong>:</p>
  
  <pre><code>'use strict';
  
  const bcrypt =require('bcrypt');
  
  module.exports = (sequelize, DataTypes) =&gt; {
    const User = sequelize.define('User', {//Modelo de tabla users.
        email: {
        type: DataTypes.STRING,
        unique: true,//validacion, solo un igual en bbdd
        allowNull: false//no permite que se quede vacio
      },
      password_hash: DataTypes.STRING,//Pass encriptado a string.
      password: DataTypes.VIRTUAL//pass sin encriptar a memoria virtual.
    }, {});
  
    User.login = function(email,password){//funcion login de User que busca un registro y lo almacena en login
      return User.findOne({//busca uno en concreto.
        where: {
          email: email//En campo email bucar el email dado. O "email" por shorthand propertys.
        }
      }).then(user=&gt;{
        if(!user) return null;//si no existe el usuario en bbdd devuelve nulo.
        return user.authenticatePassword(password).then(valid=&gt; valid ? user : null);//o tambien ".then(valid=&gt; valid ? user : null);"
        });
    };
  
    User.prototype.authenticatePassword = function(password){//compara el pass dado y el hash de la bbdd.
      return new Promise((res,rej)=&gt;{//devuelve promesa.
        bcrypt.compare(password,this.password_hash,function(err,valid){//compara , si ok valid, sí nok err.
          if(err){return rej(err);} //no coincide hash de bbdd con pass dado =&gt;err
  
          res(valid);//sí coincide hash de bbd con pass dado =&gt;valid.
        })
      })
    };
  
    User.associate = function(models) {
      // associations can be defined here
    };
  
    User.beforeCreate(function(user,options){//Antes de guardar encriptar.
      return new Promise((res,rej)=&gt;{//retorna una promesa
  
        if(user.password){//si se introduce un pass.
          bcrypt.hash(user.password, 10, function(error,hash){//algoritmo de encriptacion
           user.password_hash = hash;//se guarda el pass encriptado.
           res();//con esto decimos que ha ido bien, Para continuar
         })
       };
      });
    });
    return User;
  };
  </code></pre>