我有一个文件,(我们称之为" file1")我插入一个键值并获取它;所以这里我有我的file1实现:
var rdb;
module.exports = function(_app) {
rdb = redis.createClient();
return module.exports;
}
module.exports.parse = function (name, callback) {
rdb.set(name, 'myValue', function(err, data) {
console.log("SET:", err, data);
});
rdb.get(name, function(err, value) {
callback(err, value);
});
}
但是当我在另一个文件中调用我的解析函数时,它表示解析未定义:
var f1;
module.exports = function(_app) {
app = _app;
f1 = require('./file1.js')(_app);
};
f1.parse('test', function(err, data){
console.log(err, value);
});
我做错了吗?
答案 0 :(得分:1)
时序。将f1.parse...
放在function(_app) {...}
内。您在加载前使用f1.parse
。
即。当你的文件加载时,会发生这种情况:
f1
module.exports
被定义为某个函数(注意:函数尚未执行,因此f1 = require(...)
不会发生)f1.parse
已被调用,但f1
仍为undefined
编辑:一个简短的例子,没有所有Redis垃圾:
// a.js
module.exports = function(_app) {
return module.exports;
}
module.exports.parse = function (name, callback) {
console.log("parse");
}
// b.js
module.exports = function(_app) {
var f1 = require('./a.js')(_app);
f1.parse('test', function(err, data){ console.log(err, value); });
};
// c.js
require('./b.js')("foo");
运行node c.js
,parse
出来,没有错误。