2016-09-01 5 views
-1

ではありません。機能は、これは私のオブジェクト</p> <p>であり、以下に、私は別の文書からget関数にパラメータを渡すしようとしていますどのように機能

var Controller = require('../Controller.js'); 
Controller.get(arg1, arg2); 

nodejsが 'TypeError:Controller.get is not function'をスローします。ここで間違っていますか?ありがとう

+4

'BackgammonController'は' Controller'と同じではありません – thefourtheye

+1

また、 'this'を正しく使うためには、関数を' new'で呼び出す必要があります。 – thefourtheye

+0

@thefourtheye私の間違いだったので、それを忘れてしまった。今私の質問を編集しました。それは私の誤りの場合ではありません。 :) – garenyondem

答えて

3

このコードにはいくつかの問題がありますが、あなたが記述するTypeError: Controller.get is not a functionは発生しません。

Controllerを作成する匿名関数を呼び出す方法は、その中のthisがグローバルオブジェクト(ルーズモード)またはundefined(厳密モード)になることを意味します。 getundefinedに割り当てるエラーが発生しているとは言わずに、緩いモードを想定してみましょう。つまり、グローバルというファンクションをgetという名前で作成しています。また、Controllerがグローバルオブジェクトを返すことを意味します。

どちらも良いことではありません。これがあるので

var Controller = { 
    get: function (req, res) { 
     res.send({ 
      success: 'you got me' 
     }); 
    } 
}; 
module.exports = Controller; 

それとも

function get() { 
    res.send({ 
     success: 'you got me' 
    }); 
} 

module.exports = { get: get }; 

:あなたはget機能を持つオブジェクトをエクスポートする場合:-)

、あなたはそれに近い複雑な何もする必要はありませんNodeJSモジュールのコンテキストでは、グローバル関数を定義しません(モジュールはプライベートスコープで呼び出されます)。


それともあなたはコンストラクタするControllerを意味している場合、その後、あなたはnew経由でそれを呼び出すと、わずかにそれを再編成する必要があります。

function Controller() { 
    var self = this; // If you need it for something, you don't in your example 
    self.get = function get() { 
     res.send({ 
      success: 'you got me' 
     }); 
    }; 
} 

module.exports = Controller; 

その後、newを経由して、それを使用します。

var Controller = require('./.Controller.js'); 

var c = new Controller(); 
c.get("foo", "bar"); 

require('../Controller.js')は、現在のディレクトリではなく親ディレクトリディレクトリのController.jsファイルを使用していることを指摘しておく価値があります。あなたが間違ったファイルを取得しているため、目的に合っていない場合に、TypeError: Controller.get is not a functionが表示されます。

+0

すばらしい説明をありがとう。私は今試して応答します。 – garenyondem

+0

ありがとう、私はあなたの最初の提案として私のコードを変換し、今動作します。 – garenyondem

関連する問題