ファイルを要求しようとしていますが、その後それを変数に渡します。 this チュートリアルに従って認証システムを作成しています。 server.jsファイルを記述してコンパイルしようとすると、bsonエラーが発生したため、mongooseでそのリリースバージョンを必要とする行を変更しました。
ここに私のコードとエラーがあります:
server.js
require('./app/routes')(app, passport);
Error
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が適切にロードされていないことを意味することを読んでいますが、それを修正する理由や方法はわかりません。
コメントによる編集:
尋ねられたように、 here は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)
のように呼び出すことができる関数をエクスポートしています。
同様のエラーが発生するもう1つの理由は、モジュールAがrequire(B)
を試行し、モジュールBがrequire(A)
を試行している循環モジュール依存関係がある場合です。これが発生すると、require()
サブシステムによって検出され、そのうちの1つがnull
として返されるため、それを関数として呼び出そうとしても機能しません。その場合の修正は、通常、共通のコードを3つ目のモジュールに分割することにより、循環依存関係を削除することです。
私にとって、これは循環依存関係の問題でした。
IOW、モジュールAにはモジュールBが必要、モジュールBにはモジュールAが必要.
したがって、モジュールBでは、require('./A')
は関数ではなく空のオブジェクトです。
私にとっては、Immediate invoked functionを実行するときに、require()
の最後に;
を配置する必要があります。
エラー:
const fs = require('fs')
(() => {
console.log('wow')
})()
良い:
const fs = require('fs');
(() => {
console.log('wow')
})()