NodeJSを学び、The Node Beginnerブックに記載されている単純なHTTPサーバーを作成し始めました。私はRouter
オブジェクトを持っています。このオブジェクトには、パス名を呼び出す関数にマップするルーティングtable
が含まれています。これは、キー値オブジェクトによって実現されます。JavaScriptとNode.JS - コールバックの変数が定義されていない理由を理解できない
ここで、私のServer
オブジェクトは、上記のオブジェクトを指すrouter
メンバを持っています。 (疎結合の場合は、ルータとサーバの別名を保持しています)、サーバを起動する方法はstart()
です。これは下記の通りである:
Server.prototype.start = function() {
var myRouter = this.router;
http.createServer(function(req, res) {
var path = url.parse(req.url).pathname;
res.write(myRouter.route(path, null));
res.end();
}).listen(80);
};
今私はそれがroute()
関数の使用してルーティングを行う、createServer
関数で次にServer
オブジェクトのrouter
基準を指すmyRouter
変数を作成し、そしてました。このコードは機能します。しかし、私はmyRouter
可変部分を作成省略した場合と、直接このようcreateServer
でルーティングを実行します。それはthis.router
が定義されていないと言う
res.write(this.router.route(path, null));
。私はこれがスコープと関係があることを知っています。なぜなら、createServer
に提供された関数は、要求が受信されるたびに後で実行されるからです。しかし、myRouter
がこの問題を解決する方法を理解できません。どんな助けでも大歓迎です。
この問題は、「this」がどのように動作するかで、スコープなどとはあまり関係がありません。 –
参照:http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work – Paulpro
ありがとう、両方に。提案された答えを読み上げます。 –