【问题标题】:Starting Express from Grunt ignores config JSON data从 Grunt 启动 Express 会忽略配置 JSON 数据
【发布时间】:2014-07-14 15:33:56
【问题描述】:

我有一个快速应用程序,它从 ./config 文件夹中的单独 JSON 文件中获取一些配置设置。例如,我这样设置服务器的端口...

var config = require('config');

http.createServer(app).listen(config.port,function () {
    console.log('listening on '+config.port);   
});

如果我 cd 进入 express 文件夹并运行 npm start,这会很好。

但是,当我使用 grunt-express-server 任务从 Grunt 启动 Express app.js 时,它无法从配置文件中读取任何信息。 (我已经通过手动设置 Express app.js 中的端口对此进行了测试:express 应用程序现在可以工作,但会引发一个新错误,说它找不到视图文件夹。)

我的项目的文件夹结构如下:

/project
  Gruntfile.js
  ...
  /express
    app.js
    config/
    views/
    ...

似乎app.jsconfigviews 文件夹的相对位置被忽略了,Grunt 调用想要在根目录(它所在的位置)中查找内容。

有什么方法可以阻止/纠正这种情况吗?

【问题讨论】:

    标签: json node.js express gruntjs


    【解决方案1】:

    这取决于您的设置和目录结构。

    当您使用require 时,节点searches 用于NODE_PATH 环境变量中列出的目录中的所需文件。例外情况是当您在require 中使用'./' 时,例如require('./config'),在这种情况下,node 将在您的文件所在的目录中搜索您的配置。

    可能,当您运行 grunt 任务时,NODE_PATH 未正确设置以查找您的配置文件。所以解决方案可能是:

    1. 使用require('./config')(更好)
    2. 或将NODE_PATH 设置为配置文件所在的目录:NODE_PATH=$NODE_PATH:/path/to/dir grunt express。您还可以在 Grunt 文件 (https://github.com/jsoverson/grunt-env) 中定义 NODE_PATH

    【讨论】:

    • 感谢您的回答,但无论是由 Grunt 还是 npm start 启动,require('./config') 都会引发错误。我的 Gruntfile 位于根目录中,而 express 应用位于 express/app.js 中。有两个节点模块文件夹,一个用于 Grunt(也在根目录中),一个用于 express(在 /express/ 文件夹中)。
    • 哦,配置文件夹在`/express/config/'
    • 很难猜出问题出在哪里。您能否将您的确切目录和文件结构添加到问题中?和错误信息?谢谢!
    • 嗨雅罗斯拉夫。我认为您对文件夹结构的问题是正确的,但我仍然不确定如何解决它(除了将所有内容放在同一个文件夹中;不理想)。我已经编辑了问题以显示事情的布局......
    • 当你执行相对 require('./config') 时会抛出什么错误?此外,您的 package.json 和 Gruntfile 的内容对于调试您的情况很有用。
    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多