无法在我的续集模型上执行任何操作

时间:2017-10-18 01:25:40

标签: node.js express sequelize.js

我正在使用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', 't3st3@B4NCO00', {
  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;

1 个答案:

答案 0 :(得分:0)

此代码似乎是Sequelize和Mongoose的混合,两者都有一个名为findById的方法:

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

Mongoose使用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);
            }
        );
    }
}, ...