2017-05-26 71 views
0

有三個模塊:a.js,b.js,c.js,a.js是導出數據庫連接,b.js,c.js是導入連接,就像在兩個不同的http路由中一樣,所以連接模塊(a .js文件)將被導入兩次,這是否意味着驅動程序將連接到數據庫兩次?我與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只運行一次,所以爲什麼呢?希望你的幫助。

回答

0

模塊是他們第一次加載後緩存。這意味着(除其他外)每次調用require('foo')都會返回完全相同的對象,如果它解析爲同一個文件。

你可以在這裏閱讀更多

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

+0

感謝,現在很明顯。 – laoqiren

+0

其實模塊不僅緩存。模塊系統正確地實現了Singleton模式。 node.js上的所有模塊都是單例。這比單純的緩存功能強大得多,這意味着從模塊導入的所有代碼實際上都獲得了相同的對象。是的,Singleton設計模式通常用於緩存,但真正的意圖是在流程中創建單個gobal對象。 – slebetman