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 回答