compoundjs不能在应用程序控制器中需要文件

时间:2013-10-05 13:09:06

标签: node.js compoundjs

我们正在使用CompoundJS开发一个文件夹结构如下的应用程序: 化合物

compoundApp
|-- app
|   |-- controllers
|   |   |-- application_controller.js
|   |   |-- login_controller.js
|   |-- utils
|   |   |-- email-utils.js  

application_controller.js 中,我们需要email-util.js作为以下代码:

var _ = require('underscore'),
passport = require('passport'),
    EmailUtils = require('./app/utils/email-utils.js')(compound);

启动应用程序时出现此错误:

Error: Cannot find module './app/utils/email-utils.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 Promise.eval (eval at <anonymous> (d:\TiniPlanet_SVN\src\TiniGame\trunk\tiNiWeb\node_module\compound\node_modules\kontroller\lib\base.js:157:17), <anonymous>:145:22)

我们在不同的文件夹级别遇到了同样的问题:

EmailUtils = require('../app/utils/email-utils.js')(compound);

EmailUtils = require('../utils/email-utils.js')(compound);

EmailUtils = require('./utils/email-utils.js')(compound);

有没有人可以帮助解释这个问题以及如何解决它。我们如何找到要检查的文件夹是否需要?

1 个答案:

答案 0 :(得分:1)

require('../utils/email-utils.js')通常应该有效,因为这是正确的位置。

然而,显然CompoundJS做了一些时髦的事情,因为它使用eval运行你的代码,这使得需要相对于CompoundJS模块本身内的某个路径(阅读CompoundJS文档,这是因为你正在使用{ {3}})。

我认为最好通过调整eval controllers环境变量来解决,因此它包含您的基本目录(compoundApp)。这样,require('app/utils/email-utils')应该可以工作(虽然我不熟悉Windows上Node节点变量的复杂性)。