我正在使用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;
答案 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);
}
);
}
}, ...