从Grunt启动Express会忽略配置JSON数据

时间:2014-07-13 14:38:35

标签: json node.js express gruntjs

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

var config = require('config');

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

如果我进入快递文件夹并运行npm start

,这样可以正常工作

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

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

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

似乎app.jsconfigviews文件夹的相对位置被忽略,Grunt调用想要在根中查找内容(它在哪里)。 / p>

有没有办法停止/补救这个?

1 个答案:

答案 0 :(得分:0)

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

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

当您运行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