我有一个koa
应用,它有一堆功能分成不同的文件。当一个路由被调用时,我需要将上下文this
传递给另一个文件中的另一个函数(也是一个路由)。
档案a.js
路线 - http://127.0.0.1:3000/foo
exports.foo = function *() {
this.body = 'Some Value';
}
档案b.js
路线 - http://127.0.0.1:3000/bar
var a = require('a');
exports.bar = function *() {
this.body = yield a.foo(); // this obviously doesn't work.
}
我希望能够yield a.foo()
使用当前上下文(this
)并让它像正常路由器调用一样运行。
答案 0 :(得分:2)
我认为您的共享功能最好放在中间件中,/foo
和/bar
路由都可以调用yield this.sharedFeature(opts)
。
如果你想按照自己的方式行事,那就去做yield a.foo.call(this)
答案 1 :(得分:0)
那里几乎没有问题。一个是你必须返回值(或在回调中传递值)。还有一个问题是如何需要a.js。你需要添加它的路径“./a”(或存储它的地方),而不是“a”。这是修订版(请注意,我不在代码中包含koajs,因为这只是javascript / nodejs问题):
// a.js
exports.foo = function() {
this.body = 'Some Value';
return this;
}
// b.js
var a = require('./a'); // assumes a.js is in same directory as b.js
exports.bar = function () {
var aThis =a.foo();
console.log(aThis.body);
};
// c.js
var b = require('./b');
b.bar(); // <<<<< prints "Some Value"
这就是bar()的上下文可以传递给foo()的方法:
// a.js
exports.foo = function(bScope) {
console.log("this is bValue of b scope: %s", bScope.bValue);
}
// b.js
var a = require('./a');
exports.bar = function () {
this.bValue = "value of b";
a.foo(this);
}
// c.js
var b = require('./b');
b.bar(); // <<<<<<<< prints "this is bValue of b scope: value of b"