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

问题描述 投票:0回答:1

我正在使用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;
node.js express sequelize.js
1个回答
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);
            }
        );
    }
}, ...
© www.soinside.com 2019 - 2024. All rights reserved.