【发布时间】:2015-04-20 18:53:02
【问题描述】:
我有几个文件,递归地相互要求。
routes.js 需要 api.js。api.js 需要 upload.js、pixels.js 等。
来自upload.js 或pixels.js 我想在api.js 中使用fn。
目前我要求这样,但它不起作用:
// routes.js
var api = require('./api');
api.upload.image(args); // a fn run from routes.js
.
// api.js
module.exports = {
upload : require('./upload')
}
.
// pixels.js
module.exports = {
get : function (args) {
console.log(args);
}
}
.
// upload.js
var api = module.parent.exports; // <= tricky part
module.exports = {
image : function (args) {
api.pixels.get(args); // <= api is undefined
}
}
module.parent.exports 在子模块中是空的,我不知道如何正确地require 它们。
我应该如何require 来获得这个功能?
【问题讨论】:
-
为什么
upload : require('./upload');这一行的api.js里有;upload : require('./upload'); -
Node 通过从 require 返回一个不完整的模块来很好地支持循环需求,该模块稍后会被填充。请参阅nodejs.org/api/modules.html#modules_cycles
-
@DanD。谢谢,有道理。知道如何解决这个问题吗?
-
似乎您需要以某种方式显式导出您的 api.js 的
exports对象 -
再想一想——当你这样做时会发生什么?:
var api = module.parent;——也就是说,去掉exports部分
标签: node.js require node-modules