0

koa一連の機能が個別のファイルに分割されたアプリがあります。this1 つのルートが呼び出されたら、別のファイルで別の関数 (これもルート) にコンテキストを渡す必要があります。

ファイル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) を使用して、通常のルーターによって呼び出されているように動作させたいと考えています。

4

2 に答える 2

2

あなたの共有機能は、/foo/barルートの両方がyieldを呼び出すことができるミドルウェアに配置する方がよいと思いますthis.sharedFeature(opts)

自分の道を進みたいなら、ただそうしてくださいyield a.foo.call(this)

于 2014-06-22T16:10:26.750 に答える
0

そこにはいくつかの問題があります。1 つは、値を返す (またはコールバックで値を返す) 必要があることです。また、a.js がどのように要求されるかという問題もあります。「a」ではなく、「./a」(または保存した場所)へのパスを追加する必要があります。リビジョンは次のとおりです (これは単に javascript/nodejs の問題であるため、コードに koajs を含めていないことに注意してください)。

// 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"
于 2014-06-20T15:59:09.723 に答える