2017-10-18 113 views
0

我正在開發一個簡單的項目,使用sequelize + mysql + express,因爲一個簡單的問題而陷入困境:無法執行使用我的模型的findById等功能。無法在我的續集模型上執行任何操作

對於下面的代碼,我得到了「db.usuario.findById(...)。exec不是函數」消息。我是新手。

這是我的模型:

module.exports = function(sequelize, DataTypes) { 
    return sequelize.define('usuario', { 
    id_Usuario: { 
     type: DataTypes.STRING(18), 
     allowNull: false, 
     primaryKey: true 
    }, 
    tipo: { 
     type: DataTypes.STRING(1), 
     allowNull: false 
    }, 
    nome: { 
     type: DataTypes.STRING(45), 
     allowNull: false 
    }, 
    matricula: { 
     type: DataTypes.STRING(45), 
     allowNull: false, 
     unique: true 
    }, 
    telefone: { 
     type: DataTypes.STRING(15), 
     allowNull: true 
    }, 
    cpf: { 
     type: DataTypes.STRING(11), 
     allowNull: false, 
     unique: true 
    }, 
    email: { 
     type: DataTypes.STRING(45), 
     allowNull: false, 
     unique: true 
    }, 
    senha: { 
     type: DataTypes.STRING(45), 
     allowNull: false 
    }, 
    instituicaoEnsino: { 
     type: DataTypes.STRING(45), 
     allowNull: false 
    } 
    }, { 
    tableName: 'usuario' 
    }); 
}; 

這是我的控制器:

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

exports.user_edit_get = function(req, res, next) { 

    async.parallel({ 
     user: function(callback) { 
      db.usuario.findById(req.params.id) 
       .exec(callback) 
     }, 
    }, function(err, results) { 
     if (err) { return next(err); } 
     //Successful, so render 
     res.render('usuarioDetalhes', { user }); 
    }); 

} 

我db.js文件:

var Sequelize = require('sequelize'); 

const sequelize = new Sequelize('mydb', 'root', '[email protected]', { 
    host: 'localhost', 
    port: '3306', 
    dialect: 'mysql', 

    pool: { 
    max: 5, 
    min: 0, 
    idle: 10000 
    }, 
}); 

// Connect all the models/tables in the database to a db object, 
//so everything is accessible via one object 
const db = {}; 

db.Sequelize = Sequelize; 
db.sequelize = sequelize; 

//Models/tables 
db.usuario = require('./models/usuario.js')(sequelize, Sequelize); 

module.exports = db; 

回答

0

此代碼似乎是一個混合物, Sequelize和Mongoose,它們都有一個名爲findById的方法:

db.usuario.findById(req.params.id) 
    .exec(callback) 

貓鼬使用exec,而Sequelize方法findById將返回一個Promise。真的沒有任何需要使用async.parallel,你可以使用Promise.all而不是(我假設你的真實代碼包含多個查詢,如果你真的只有1,那麼你不需要任何這個)。

如果你做到這一點使用async.parallel它可能是這個樣子:

async.parallel({ 
    user: function(callback) { 
     db.usuario.findById(req.params.id).then(
      function(value) { 
       callback(null, value); 
      }, 
      function(err) { 
       callback(err); 
      } 
     ); 
    } 
}, ... 
相關問題