问题 Node JS - 从同一文件中的另一个方法调用方法


我有这个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()'

如何从另一个方法调用一个方法?


9498
2017-09-05 04:12


起源

module.exports.foo.call(this); ? - ChaosPandion
@Danil foo是一个从路由器调用的请求处理程序。 - Veera
有些事情肯定会改变 this 上下文但问题是谁? - ChaosPandion
好的,试过了 module.exports.foo() 它的工作原理..但会弄清楚为什么缺少上下文.. - Veera


答案:


这样做:

module.exports = {

  foo: function(req, res){

    bar();

  },
  bar: bar
}

function bar() {
  ...
}

不需要关闭。


7
2017-09-05 04:24



如此全球化 bar() 然后? - Lucas Green
不。仅限于此模块内。 - timidboy
这就是Node.js的工作方式。 - timidboy


我想你能做的就是 捆绑 传递回调之前的上下文。

something.registerCallback(module.exports.foo.bind(module.exports));

2
2017-09-05 04:20





尝试这个:

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

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

        bar: realBar
    };
}());

1
2017-09-05 04:21





接受的响应是错误的,您需要使用“this”关键字从当前作用域调用bar方法:

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

        this.bar();

      },
      bar: function() { console.log('bar'); }
    }

1
2018-03-23 22:46





酒吧是内部(私人)foo?

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

0
2018-04-03 19:36





请尝试以下代码。你可以从任何地方引用每个函数(需要导入.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;

0
2018-01-16 14:01