加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

无法使用mysql检索Sequelize的型号名称

发布时间:2021-05-16 12:14:23 所属栏目:MySql教程 来源:网络整理
导读:我是nodejs和Sequelize ORM框架的新手.我试图让它与mysql一起工作.我已经取得了一些很大进步但是目前我陷入了续集需要加载模型的部分.但我收到一个错误,从文件中检索名称. 万维网 var debug = require('debug')('sampleapp')var app = require('../server'

我是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()等同步函数不兼容.

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!