2017-05-26 2 views
0

a.js,b.js,c.js,a.jsはデータベース接続をエクスポートし、b.js,c.jsは2つの異なるhttpルートのように接続をインポートするため、接続モジュール.js)を2回インポートすると、ドライバがデータベースに2回接続することになりますか?私はnode.jsのモジュールと混同しています

は、私はこのように試してみました: test.js

let a = 20; 
let b = 30; 
console.log('I am test'); 
let obj = { 
    a, 
    b 
} 
module.exports = obj; 

en.js

let obj = require('./test'); 

console.log('I am en.js') 

module.exports = obj; 

hi.js

let obj = require('./test'); 
let obj2 = require('./en'); 

console.log(obj2) 

実行hi.jsと結果を:

I am test 
I am en 
{a:20,b:30} 

en.jsとhi.jsは両方ともtest.jsをインポートします。結果から、test.jsは1回だけ実行されるようです。その理由は何ですか?あなたの助けを願います。

答えて

0

モジュールは、最初にロードされた後にキャッシュされます。つまり、require( 'foo')へのすべての呼び出しは、同じファイルに解決される場合、返されたオブジェクトと全く同じオブジェクトを返すことを意味します(とりわけ)。

あなたは今、それは明らかだ、もっとここ

https://nodejs.org/api/modules.html#modules_caching

+0

感謝を読むことができます。 – laoqiren

+0

実際には、モジュールは単にキャッシュされるだけではありません。モジュールシステムは、シングルトンパターンを適切に実装します。 node.jsのすべてのモジュールはシングルトンです。これは単なるキャッシングよりもはるかに強力です。つまり、モジュールからインポートするすべてのコードが実際に同じオブジェクトを取得することを意味します。はい、シングルトンのデザインパターンはしばしばキャッシュに使用されますが、実際の目的はプロセス内に単一のゴブリングオブジェクトを作成することです。 – slebetman

関連する問題