381

module.exports宣言内の別の関数内から関数をどのように呼び出しますか?

app.js
var bla = require('./bla.js');
console.log(bla.bar());
bla.js
module.exports = {

  foo: function (req, res, next) {
    return ('foo');
  },

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

}

foo関数内から関数にアクセスしようとしていますが、次のbarようになります。

TypeError:オブジェクト#にはメソッド'foo'がありません

に変更this.foo()すると、次のfoo()ようになります。

ReferenceError:fooが定義されていません

4

9 に答える 9

455

this.foo()に変更module.exports.foo()

于 2012-05-05T13:21:46.580 に答える
200

module.exportsブロックの外で関数を宣言できます。

var foo = function (req, res, next) {
  return ('foo');
}

var bar = function (req, res, next) {
  return foo();
}

それで:

module.exports = {
  foo: foo,
  bar: bar
}
于 2012-10-09T06:43:17.897 に答える
128

これを行うと、より簡潔で読みやすくなります。これは、よく書かれたオープンソースのモジュールのいくつかで私が見たものです。

var self = module.exports = {

  foo: function (req, res, next) {
    return ('foo');
  },

  bar: function(req, res, next) {
    self.foo();
  }

}
于 2015-03-20T21:45:25.447 に答える
67

モジュールのグローバル スコープへの参照を (module.)exports.somemodule 定義の外に保存することもできます。

var _this = this;

exports.somefunction = function() {
   console.log('hello');
}

exports.someotherfunction = function() {
   _this.somefunction();
}
于 2013-05-07T20:09:57.190 に答える
42

OPの元のスタイルに近い別のオプションは、エクスポートするオブジェクトを変数に入れ、その変数を参照してオブジェクト内の他のメソッドを呼び出すことです。その後、その変数をエクスポートすると、準備完了です。

var self = {
  foo: function (req, res, next) {
    return ('foo');
  },
  bar: function (req, res, next) {
    return self.foo();
  }
};
module.exports = self;
于 2013-10-03T15:54:24.707 に答える
0

私がしていることは、スタンドアロンfoo関数を作成し、両方の場所で参照することです。

そうすればthis、矢印や通常の機能の使用に関係なく、問題を防ぐことができます

function foo(req,res,next) {
  return ('foo');
}

次にfoo、両方の場所で参照できます

module.exports = {

  foo, // ES6 for foo:foo

  bar: function(req, res, next) {
    foo();
  }

}
于 2021-09-09T20:59:23.680 に答える