【问题标题】:NodeJS sample app failing to startup, unable to find 'config'?NodeJS 示例应用程序无法启动,无法找到“配置”?
【发布时间】:2015-02-19 13:18:01
【问题描述】:

我正在学习节点并尝试运行我从 git 中提取的示例应用程序:

https://github.com/madhums/node-express-mongoose-demo

按照所有说明操作后,当我运行时

npm start

我收到一条错误提示

> nodejs-express-mongoose-demo@4.0.0 start /Users/adam419/Desktop/Programming/JSPractice/node-express-mongoose-demo
> NODE_PATH=./config:./app/controllers NODE_ENV=development ./node_modules/.bin/nodemon server.js

20 Dec 16:45:19 - [nodemon] v1.2.1
20 Dec 16:45:19 - [nodemon] to restart at any time, enter `rs`
20 Dec 16:45:19 - [nodemon] watching: *.*
20 Dec 16:45:19 - [nodemon] starting `node --harmony server.js`
WARNING: No configurations found in configuration directory:
WARNING: /Users/adam419/Desktop/Programming/JSPractice/node-express-mongoose-demo/config
WARNING: See https://www.npmjs.org/package/config for more information.

module.js:340
    throw err;
          ^
Error: Cannot find module 'undefined/config/imager.js'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/Users/adam419/Desktop/Programming/JSPractice/node-express-mongoose-demo/app/models/article.js:10:20)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
20 Dec 16:45:20 - [nodemon] app crashed - waiting for file changes before starting...

确保我已安装并运行 mongodb 并确保已安装所有依赖项(包括“配置”)后会发生这种情况。实际上在我运行时在节点外壳中

require('config')

结果未定义。

为什么这个应用程序无法启动?

【问题讨论】:

    标签: javascript node.js mongodb express npm


    【解决方案1】:

    那是因为配置必须相对加载。 require('config') 语句试图在你的 node_modules 目录中找到一个名为 config 的模块,这里的 config 在你的根文件夹的 config 目录中。尝试将require('config') 更改为require('../../config')。这应该可以解决您的问题。

    【讨论】:

    • node_modules目录下其实有一个叫config的文件夹,require('../../config')也没用。
    • @AdamBronfin 需要的是模块,而不是包含配置的文件夹。默认情况下,此模块将查看根目录并在那里找到 config 文件夹。因此,require('config') 是正确的。
    【解决方案2】:

    删除我的 node_modules 文件夹中的配置文件夹解决了问题。

    【讨论】:

    • 是的,这也为我解决了这个问题。但是你能解释一下为什么有这个配置文件夹会把事情搞砸吗?它是如何创建的?
    • 你删除了配置模块......你不应该这样做。
    【解决方案3】:

    在我的情况下,忘记在配置文件(default.js)中导出配置对象

    module.exports = 配置

    【讨论】:

      【解决方案4】:

      我遇到了类似的错误。

      问题:我在根目录的子文件夹中创建了config 文件夹。

      解决办法:config文件夹移动到根目录下。

      另一个可能的错误原因可能是 config 文件夹中缺少配置文件(例如 config/default.jsonconfig/production.json 等)。

      【讨论】:

      • 这解决了我的问题,谢谢。我正在关注一个教程,但没有注意到目录的级别。
      【解决方案5】:

      我看到当NODE_CONFIG_DIR 环境变量未设置时会发生这种情况。它告诉 node-config 在哪里可以找到配置文件。默认情况下读取 ./config 目录中运行进程的配置文件,通常是应用程序根目录。

      node-config docs 建议在 CLI 或配置文件中设置此环境变量,如下所示:

      process.env["NODE_CONFIG_DIR"] = __dirname;
      

      如果配置文件与您的 default.EXT 和其他配置文件所在的文件夹位于同一文件夹中,__dirname 可以,但您可能需要将其更改为这些文件所在的实际路径。

      否则,我们最终会得到:"WARNING: No configurations found in configuration directory:&lt;PROJECT_ROOT&gt;/config/config" ,随后会出现如下错误:'Configuration property "some-config-key" is not defined'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-05
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-03
        • 2016-09-19
        相关资源
        最近更新 更多