[解決済み] Require は空のオブジェクトを返す
質問
私は、index.jsといくつかのモデル(クラス)があるフォルダーを持っています。 index.js
module.exports = {
Book : require('./book'),
Author : require('./author')
}
book.js
var Author = require('./author')
var Book = models.ActiveRecord.extend({
schema : {
belongsTo : {
author : Author
}
}
})
module.exports = Book
author.js
var Book = require('./book')
var Author = models.ActiveRecord.extend({
schema : {
hasMany : {
author : Book
}
}
})
module.exports = Author
問題は、AuthorクラスがBookを見つけられないようなことです。これは、ただの空のオブジェクトです。 しかし、index.jsのexportsを切り替えて、Authorの後にBookを置くと、それは動作しますが、他のモデルが動作しなくなります。
ハックして動作させるようなことはしたくありません。
どのように解決するのですか?
これは、循環的な依存関係があるためです。Node.jsはこれを非常に特殊な方法で処理します。
-
最初のモジュールがロードされ、実行されます(この場合。
book.js
). それ(book.js
) は、2番目のモジュールをロードして実行します (author.js
)のときに、その(book.js
) が必要で、もう一方の (author.js
) -
2番目のモジュール(
author.js
)がロードされ、実行されると、それ(author.js
) は、最初のモジュール (book.js
)が、それ(author.js
) を受け取ることになります。 部分充填 book.jsがauthor.jsを必要とする前にexportsで設定されたものが、そのオブジェクトに含まれることになります。 -
その後
book.js
が完全に実行されると、オブジェクトauthor.js
から取得したrequire('./book')
は、完全なbook.js
モジュールオブジェクト
詳しくは、こちらのドキュメントをご覧ください。 http://nodejs.org/api/modules.html
ActiveRecordのオブジェクトにスキーマを動的に追加することができれば、解決する方法の1つです。実は、これはちょっと厄介な状況なんです。実際、モジュール・システムがなくても、これは問題が発生します。このコードをすべて1つのファイルにまとめた場合、どのように動作させるのでしょうか。
関連
-
[解決済み】ExpressJSとMeteorJSの比較【終了しました
-
[解決済み】エラー TRK0005: 位置特定に失敗しました。"CL.exe"
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み】POSTできない/expressを使用するとエラーが発生する
-
[解決済み] Yarn にパッケージを強制的に再インストールさせるにはどうしたらいいですか?
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] TypeScript getting error TS2304: cannot find name ' require'.
-
[解決済み] Node.js の console.log() で '[Object]' ではなく、完全なオブジェクトを取得するにはどうすればよいですか?
-
[解決済み] JavaScriptの "require "とは何ですか?
-
[解決済み】Node.jsのrequireとES6のimport/exportを使い分ける。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mongoError: トポロジーが破壊されました
-
[解決済み】Nodejs: Errorを解決する方法。ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み】"npm update -g" の後に "Cannot find module 'npmlog'" というエラーが発生する。
-
[解決済み】ブロックスコープの宣言は、ストリクトモード以外ではまだサポートされていません。
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み] ExpressJS : res.redirect()が期待通りに動作しない?
-
[解決済み] Json Web Token verify() return jwt malformed
-
[解決済み] Mongoose Schema がモデルとして登録されていません。