1. ホーム
  2. javascript

[解決済み】NodeJs 。TypeError: require(...) は関数ではありません。

2022-02-09 04:05:45

質問

私はファイルを要求し、その後それを変数に渡そうとしています。 これ チュートリアルで、認証システムを作成しました。server.jsを書いてコンパイルするとBSONエラーが出るので、mongooseでリリース版を要求している行を変更しました。

以下は私のコードとエラーです。

server.js

require('./app/routes')(app, passport);

エラー

require('./app/routes')(app, passport);
                   ^

TypeError: require(...) is not a function
           at Object.<anonymous> (d:\Node JS learning\WorkWarV2\server.js:38:24)
           at Module._compile (module.js:434:26)
           at Object.Module._extensions..js (module.js:452:10)
           at Module.load (module.js:355:32)
           at Function.Module._load (module.js:310:12)
           at Function.Module.runMain (module.js:475:10)
           at startup (node.js:117:18)
           at node.js:951:3

Process finished with exit code 1

という意味になるのが普通だと読んだことがあります。 requireJS が正しく読み込まれないのですが、その理由と解決方法がわかりません。

コメントにより編集しました。

質問された通り。 こちら の結果です。 console.log(require);

どのように解決するのですか?

ということだと思います。 module.exports の中に、あなたの ./app/routes モジュールは関数として割り当てられていないので、そのため require('./app/routes') は関数に解決されないので、次のように関数として呼び出すことはできません。 require('./app/routes')(app, passport) .

表示する ./app/routes それについてさらにコメントする必要があれば

このような感じになるはずです。

module.exports = function(app, passport) {
    // code here
}

この関数をエクスポートすると、次のように呼び出すことができます。 require('./app/routes')(app, passport) .


同じようなエラーが発生するもう一つの理由は、モジュールAが require(B) で、モジュールBが require(A) . このような事態が発生すると、それを検知するために require() サブシステムが起動し、そのうちの1つが null そのため、それを関数として呼び出そうとしても、うまくいきません。 この場合、循環的な依存関係を解消するために、通常は共通のコードを第3のモジュールに分割し、両者が別々にロードできるようにします。