15

私はこのnodeJSコードを持っています。

module.exports = {

  foo: function(req, res){
    ...
    this.bar(); // failing
    bar(); // failing
    ...
  },

  bar: function(){
    ...
    ...
  }
}

bar()メソッド内からメソッドを呼び出す必要がありますfoo()。私も試し this.bar()ましたbar()が、どちらも失敗しましたTypeError: Object #<Object> has no method 'bar()'

あるメソッドを別のメソッドから呼び出すにはどうすればよいですか?

4

7 に答える 7

14

あなたはこのようにそれを行うことができます:

module.exports = {

  foo: function(req, res){

    bar();

  },
  bar: bar
}

function bar() {
  ...
}

閉鎖は必要ありません。

于 2012-09-05T04:24:09.723 に答える
8

受け入れられた応答が間違っています。「this」キーワードを使用して、現在のスコープからbarメソッドを呼び出す必要があります。

    module.exports = {
      foo: function(req, res){

        this.bar();

      },
      bar: function() { console.log('bar'); }
    }
于 2017-03-23T22:46:03.447 に答える
4

コールバックを渡す前にコンテキストをバインドすることができると思います。

something.registerCallback(module.exports.foo.bind(module.exports));
于 2012-09-05T04:20:04.563 に答える
2

これを試して:

module.exports = (function () {
    function realBar() {
        console.log('works');
    }
    return {

        foo: function(){
            realBar();
        },

        bar: realBar
    };
}());
于 2012-09-05T04:21:47.250 に答える
1

次のコードを試してください。各関数はどこからでも参照できます(.jsファイルをインポートする必要があります)

function foo(req,res){
    console.log("you are now in foo");
    bar();
}
exports.foo = foo;

function bar(){
    console.log("you are now in bar");
}
exports.bar = bar;
于 2017-01-16T14:01:42.653 に答える
0

barはfooの内部(プライベート)になることを目的としていますか?

module.exports = {
    foo: function(req, res){
        ...
        function bar() {
            ...
            ...
        }
        bar();     
        ...
    }
}
于 2013-04-03T19:36:09.707 に答える
0

Node js + Expressでは、同じコントローラーでこの構文を使用できます

//myController.js
exports.funA = () =>{

    console.log("Hello from funA!")

    //cal funB
    funB()

}

let funB = () =>{

    console.log("Hello from funB!")
}

関数の前に必ずletキーワードを使用し、メイン関数内で()括弧を使用して呼び出してください。

出力

App listening at http://localhost:3000
Hello from fun A!
Hello from fun B!
于 2020-01-15T13:06:18.477 に答える