【问题标题】:Node JS - Calling a method from another method in same fileNode JS - 从同一文件中的另一个方法调用一个方法
【发布时间】:2020-01-23 03:38:13
【问题描述】:

我有这个 nodeJS 代码。

module.exports = {

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

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

我需要从foo() 方法内部调用bar() 方法。我试过this.bar()bar(),但都没有说TypeError: Object #<Object> has no method 'bar()'

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

【问题讨论】:

  • module.exports.foo.call(this); ?
  • @Danil foo 是一个从路由器调用的请求处理程序。
  • 某些东西肯定会改变this 的上下文,但问题是谁?
  • 好的,尝试了module.exports.foo(),它可以工作..但会弄清楚为什么上下文丢失了..

标签: javascript node.js


【解决方案1】:

你可以这样做:

module.exports = {

  foo: function(req, res){

    bar();

  },
  bar: bar
}

function bar() {
  ...
}

不需要关闭。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我认为你可以做的是bind 传递回调之前的上下文。

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

      【讨论】:

        【解决方案4】:

        试试这个:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            bar 是否打算成为 foo 的内部(私有)?

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

            【讨论】:

              【解决方案7】:

              在 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!
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-01-14
                • 2018-05-07
                • 1970-01-01
                • 2013-10-08
                • 2014-11-07
                相关资源
                最近更新 更多