2016-08-30 4 views
0

私のコードを2回実行することに問題があります。標準のExpressアプリケーションで作業する私はMongooseスキーマを作成し、それぞれのファイルにエクスポートしてエクスポートします。 ノードはmongooseスキーマに対してコードを2回実行します

//user.js 
const User = mongoose.model('User', userSchema) 
module.exports = User 

//In other files 
const User = require('../models/User') 

は今、私は自分のアプリケーションに2つの場所でこれを使用し、それが今のモデルを作成するコードのみであるよう

Cannot overwrite `User` model once compiled. 

だから上記のコードは二回呼ばなっているというエラーを取得します。しかし、私はNodeが自分のコードで必要とされるので一度だけ実行すると思うでしょう。

本当に変わった部分は、Gitの以前のバージョンをチェックアウトしているのと同じエラーが出て、私と一緒に作業している人たちも同じエラーになります。だから私は解決策を探すべきアイデアはもうありません。

+0

user.js 'console.log(module.parent)'の先頭に書き込んでみてください。このようにして、誰がそれを呼び出したかを見ることができます。 –

+0

これは起こるべきではありません。既に 'require()'されたファイルは再び実行されません。 – robertklep

+0

@robertklepだから私は今、とても深く混乱しているのです。 –

答えて

2

解決策が見つかりました。

私はモジュールを一度はmodels/user、もう一度はmodel/Userと要求しました。これは、requireのキャッシュに2つのモジュールが作成されています。

このことについて多くの議論がありました:

one issue

another issue

old PR

他のシステムの解決パスは大文字と小文字を区別しながら、パスは大文字と小文字を区別しない解決によるWindowsにあるようですしたがってノードは機密扱いをします。

新しい'causeのモジュールが実行されます。両方の時間を小文字で入力するだけで、問題は解決されます。

+0

Windows上のノード開発にもっと不満を感じることはありません。 linuxに移動する。 –

0

私は変数が "ユーザー"を宣言するために使用する "const"に問題があると思います。 の代わりに "var"を使用してください。

//user.js 
var User = mongoose.model('User', userSchema) 
module.exports = User 

//In other files 
var User = require('../models/User') 

P/S:これは "CONST" と "VAR" の詳細を明らかにリンクです:

Const in javascript? When to use it and is it necessary

はあなたのためにそれが参考に願っています!

+1

あなたは常にlet over varを優先するべきです。 –

+1

それは違いがあるとは思っていませんでしたが、とにかく試してみました。すべての 'const'を' var'で置き換えました。それはそれを解決しませんでした。 –

関連する問題