【问题标题】:Node sequelize throwing undefined error when checking if an object exists检查对象是否存在时,节点续集抛出未定义的错误
【发布时间】:2018-05-04 13:49:51
【问题描述】:

好的,所以这要么很奇怪,要么我不理解正在发生的事情。我正在尝试在节点中加载续集库。

当我尝试连接时,我使用的是 CLI 生成的 index.js 文件,但是这一行:

if (config.use_env_variable) {
    console.log('i ran');
  var sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
      var sequelize = new Sequelize(config.db.database, config.db.username, config.db.password, {
      dialect:config.db.dialect});
}

给我这个错误:

Cannot read property 'use_env_variable' of undefined

据我所知,该行旨在查看这是否甚至返回任何内容,所以我不明白为什么会抛出该错误?

更新

config 在其上方的一行中被调用,到那时为止的整个文件是:

'use strict';

var fs        = require('fs');
var path      = require('path');
var Sequelize = require('sequelize');
var basename  = path.basename(__filename);
const config    = require(path.join(__dirname,'../config/config.js'));
const db        = {};

console.log(config);


if (config.use_env_variable) {
    console.log('i ran');
  var sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
      var sequelize = new Sequelize(config.db.database, config.db.username, config.db.password, {
      dialect:config.db.dialect});
}

UPDATE 在工作版本上添加了配置的 console.log

【问题讨论】:

  • 此处未定义配置。
  • config 绝对定义为当我删除 if 语句并只使用像 config.db.username 这样的常规变量时它是有效的。但是没有 config.use_env_variable。我明白为什么它未定义,但不明白为什么它会导致错误。不应该直接使用 else 子句吗?
  • 我不明白。在您删除的屏幕截图中,我们可以看到配置没有属性use_env_variable。您还可以看到 sequelize 已正确初始化(因为您的 else)。
  • 是的,我想通了。我删除了屏幕截图,因为我不小心使用了生产变量集,我真的不能把它放在 SO
  • 那么如果你想通了,问题是什么? =P

标签: mysql node.js sequelize.js sequelize-cli


【解决方案1】:

在与错误斗争了 3 天后,今天我能够找到解决方案。

我是怎么解决的?

我使用 JS trim() 函数来删除空格。

例如

  process.env.NODE_ENV === "development"   // return false

  why ?

 "development " === "development"   // return false because of extra space

process.env.NODE_ENV.trim() === "development" //return true

这是我的solution

【讨论】:

    【解决方案2】:

    您似乎没有config/config.json 文件或路径不正确。在model/index.js,你会有这一行

    let config = require(`${__dirname}/../../config/config.json`)[env];
    

    或类似的东西。确保这条路径是正确的路径

    【讨论】:

    • 我的配置文件是必需的。我只是好奇为什么不跳过 else 子句?
    • 你能在这里console.log你的配置对象吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2019-06-06
    • 2015-09-27
    • 1970-01-01
    • 2017-06-03
    相关资源
    最近更新 更多