无法使用 mysql 检索 Sequelize 的型号名称
Cant retrieve the model name for Sequelize with mysql
我是 nodejs 和 Sequelize ORM 框架的新手。我试图让它与 mysql 一起工作。我取得了一些很大的进步,但目前我还停留在需要在模型中加载 sequelize 的部分。但是我在从文件中检索名称时遇到错误。
www
var debug = require('debug')('sampleapp')
var app = require('../server');
var models = require('../model');
app.set('port', process.env.PORT || 3000);
//server running
models.sequelize.sync().then(function () {
var server = app.listen(app.get('port'), function(){
debug('The magic is happening on port '+server.address().port);
});
});
index.js
"use strict"
var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var debug = require('debug');
var env = process.env.NODE_ENV || "development";
var config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
var sequelize = new Sequelize(config.database, config.username, config.password, config);
var db = {};
fs.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== 'index.js')
})
.forEach(function(file) {
var model = sequelize['import'](path.join(__dirname, file))
db[model.name] = model
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
user.js
module.exports = function(sequelize, DataType){
var User = sequelize.define('user', {
name: DataType.STRING,
password: DataType.STRING,
lastName: DataType.STRING,
email: DataType.STRING,
gender: DataType.CHAR,
cellNumber: DataType.INTEGER
}, {
instanceMethods : {
create : function(onSuccess, onError){
var name = this.name;
var lastName = this.lastName;
var email = this.email;
var gender = this.gender;
var cellNumber = this.cellNumber;
var password = this.password;
var shasum = crypto.createHash('sha1');
shasum.update(password);
password = shasum.digest('hex');
User.build({name: name, lastName: lastName, email: email, gender: gender, cellNumber: cellNumber, password: password})
.save().success(onSuccess).error(onError);
}
}
});
};
我一直在 db[model.name] = model :
收到这个错误
TypeError: Cannot read property 'name' of undefined
这个错误已经有一段时间了。任何帮助将不胜感激
您可能在 model
目录中选择了一个非模型文件。该目录中还有哪些其他文件?您只 想导入 javascript 个文件,您的文件过滤器不够具体。尝试强制它只检测 javascript 个文件。一个简单的方法是检查文件名的最后三个字符并确保它们是 .js
。
(file.slice(-3) === '.js')
像这样将其添加到文件过滤器中:
.filter(function(file) {
return (file.indexOf('.') !== 0) && (file !== "index.js") && (file.slice(-3) === '.js');
})
它可能失败的另一个原因是 sequelize 的实例没有成功实例化并且在您实际导入模型之前静默失败。我用这样的东西来确保我在导入之前有连接:
var sequelize = new Sequelize(foo, bar, baz);
sequelize.authenticate().then(function() {
console.log('Database connected and authenticated!');
return true;
}).catch(function(err) {
console.error('Failed to connect and authenticate', err);
return false;
});
如果您使用类似这样的东西,将更容易发现错误。尝试将数据库检查放在现有代码之上(或者甚至只是暂时注释掉您的代码)并确认您实际上已成功连接。一旦确认已连接,调试奇怪的东西就会容易得多。
注意: 一旦确认它正在工作,请不要将数据库检查留在那里。它是 Promise
并且与 fs.readdirSync()
.
等同步函数配合不佳
问题是找不到您创建的模型。
return User
对我有用。
我是 nodejs 和 Sequelize ORM 框架的新手。我试图让它与 mysql 一起工作。我取得了一些很大的进步,但目前我还停留在需要在模型中加载 sequelize 的部分。但是我在从文件中检索名称时遇到错误。
www
var debug = require('debug')('sampleapp')
var app = require('../server');
var models = require('../model');
app.set('port', process.env.PORT || 3000);
//server running
models.sequelize.sync().then(function () {
var server = app.listen(app.get('port'), function(){
debug('The magic is happening on port '+server.address().port);
});
});
index.js
"use strict"
var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var debug = require('debug');
var env = process.env.NODE_ENV || "development";
var config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
var sequelize = new Sequelize(config.database, config.username, config.password, config);
var db = {};
fs.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== 'index.js')
})
.forEach(function(file) {
var model = sequelize['import'](path.join(__dirname, file))
db[model.name] = model
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
user.js
module.exports = function(sequelize, DataType){
var User = sequelize.define('user', {
name: DataType.STRING,
password: DataType.STRING,
lastName: DataType.STRING,
email: DataType.STRING,
gender: DataType.CHAR,
cellNumber: DataType.INTEGER
}, {
instanceMethods : {
create : function(onSuccess, onError){
var name = this.name;
var lastName = this.lastName;
var email = this.email;
var gender = this.gender;
var cellNumber = this.cellNumber;
var password = this.password;
var shasum = crypto.createHash('sha1');
shasum.update(password);
password = shasum.digest('hex');
User.build({name: name, lastName: lastName, email: email, gender: gender, cellNumber: cellNumber, password: password})
.save().success(onSuccess).error(onError);
}
}
});
};
我一直在 db[model.name] = model :
收到这个错误TypeError: Cannot read property 'name' of undefined
这个错误已经有一段时间了。任何帮助将不胜感激
您可能在 model
目录中选择了一个非模型文件。该目录中还有哪些其他文件?您只 想导入 javascript 个文件,您的文件过滤器不够具体。尝试强制它只检测 javascript 个文件。一个简单的方法是检查文件名的最后三个字符并确保它们是 .js
。
(file.slice(-3) === '.js')
像这样将其添加到文件过滤器中:
.filter(function(file) {
return (file.indexOf('.') !== 0) && (file !== "index.js") && (file.slice(-3) === '.js');
})
它可能失败的另一个原因是 sequelize 的实例没有成功实例化并且在您实际导入模型之前静默失败。我用这样的东西来确保我在导入之前有连接:
var sequelize = new Sequelize(foo, bar, baz);
sequelize.authenticate().then(function() {
console.log('Database connected and authenticated!');
return true;
}).catch(function(err) {
console.error('Failed to connect and authenticate', err);
return false;
});
如果您使用类似这样的东西,将更容易发现错误。尝试将数据库检查放在现有代码之上(或者甚至只是暂时注释掉您的代码)并确认您实际上已成功连接。一旦确认已连接,调试奇怪的东西就会容易得多。
注意: 一旦确认它正在工作,请不要将数据库检查留在那里。它是 Promise
并且与 fs.readdirSync()
.
问题是找不到您创建的模型。
return User
对我有用。