我是nodejs和Sequelize ORM框架的新手.我试图让它与mysql一路事变.我已经取得了一些很大前进可是今朝我陷入了续集必要加载模子的部门.但我收到一个错误,从文件中检索名称.
万维网
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
暂且呈现此错误一段时刻了.任何辅佐将不胜谢谢
最佳谜底
你有也许在模子目次中选择一个非模子文件.您在该目次中尚有哪些其他文件?您只想导入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;
});
假如你行使这样的对象,它会更轻易发明错误.实行将数据库搜查置于现有代码之上(可能乃至只是姑且注释您的代码)并确认您现实上已乐成毗连.一旦你确认你已经毗连,就可以更轻易地调试稀疏的对象.
留意:一旦确认其正常事变,请不要将DB搜查留在哪里.它是一个Promise,而且与fs.readdirSync()等同步函数不兼容.
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|