ではありません。機能は、これは私のオブジェクト</p> <p>であり、以下に、私は別の文書からget関数にパラメータを渡すしようとしていますどのように機能
var Controller = require('../Controller.js');
Controller.get(arg1, arg2);
nodejsが 'TypeError:Controller.get is not function'をスローします。ここで間違っていますか?ありがとう
ではありません。機能は、これは私のオブジェクト</p> <p>であり、以下に、私は別の文書からget関数にパラメータを渡すしようとしていますどのように機能
var Controller = require('../Controller.js');
Controller.get(arg1, arg2);
nodejsが 'TypeError:Controller.get is not function'をスローします。ここで間違っていますか?ありがとう
このコードにはいくつかの問題がありますが、あなたが記述するTypeError: Controller.get is not a function
は発生しません。
Controller
を作成する匿名関数を呼び出す方法は、その中のthis
がグローバルオブジェクト(ルーズモード)またはundefined
(厳密モード)になることを意味します。 get
をundefined
に割り当てるエラーが発生しているとは言わずに、緩いモードを想定してみましょう。つまり、グローバルというファンクションを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
が表示されます。
すばらしい説明をありがとう。私は今試して応答します。 – garenyondem
ありがとう、私はあなたの最初の提案として私のコードを変換し、今動作します。 – garenyondem
'BackgammonController'は' Controller'と同じではありません – thefourtheye
また、 'this'を正しく使うためには、関数を' new'で呼び出す必要があります。 – thefourtheye
@thefourtheye私の間違いだったので、それを忘れてしまった。今私の質問を編集しました。それは私の誤りの場合ではありません。 :) – garenyondem