2017-06-09 56 views
0

我學習節點/蒙戈,現在我能理解這樣的代碼,module.exports = {Mongoose,models:{...}}是什麼意思?

module.exports = mongoose.model('User', UserSchema); 

我聽不太懂以下,

module.exports = { Mongoose, // var Mongoose = require('mongoose'); 
    models: { 
     user: require('./schemas/user.js'), 
     room: require('./schemas/room.js') 
    } 
}; 

我可以看到筆者想出口貓鼬和模型。但是導出的對象是一個JSON對象嗎? Mongoose它是一個鍵還是一個值? JSON是否允許沒有值的鍵或沒有鍵的值? 或者我錯了?

+0

基本上是在ES6的一項新功能,在whcih你可以通過只變量與它會工作作爲重點和值具有相同的名稱作爲變量名 –

回答

1

首先,只是術語澄清:JSON是一個字符串,而不是一個對象,因此它是縮寫Ĵ AVA 小號 CRIPT ö bject Ñ浮選。你有什麼被通俗地稱爲躺在Ø LD Ĵ avascript Ø bject一個POJOP。他們是不同的。

其次,讓我們打破出口聲明:

{ Mongoose, //... 

這是ES6(ES2015)語法object initialization using shorthand property names。基本上,如果變量名稱(var foo = 'hi')與對象屬性名稱匹配,則初始化可以簡單地爲{ foo },與{ foo: foo }相同。

關於什麼是出口,這將是一個POJO等價於:

{ 
    Mongoose: require('mongoose'), 
    models: { 
     user: require('./schemas/user.js'), 
     room: require('./schemas/room.js') 
    } 
}; 

獎金:由於節點維護所需模塊的高速緩存,貓鼬用這個作爲cacheing機制,對所有申報模式和架構。如果在一個文件中導入Mongoose並創建模型,另一個模塊將能夠導入Mongoose並通過Mongoose的緩存訪問該模型。

// a.js 
const mongoose = require('mongoose'); 
const FooModel = new mongoose.model('Foo', {}); 

// b.js 
const aMod = require('./a.js'); // Import here only to declare model. 
const mongoose = require('mongoose'); 
const FooModel = mongoose.model('Foo'); // Same model a.js 
+0

Thanks.BTW,我不瞭解downvote – Qiulang

+0

有些人對他們的投票真的很難。我不會爲此而出汗。 –

1

看起來像是使用ES6語義的作者。

在ES6,你可以簡寫如下:

const Mongoose = require('mongoose'); 
const myObj = { Mongoose: Mongoose }; 

到:

const Mongoose = require('mongoose'); 
const myObj = { Mongoose }; 

基本上,它會解釋,由於相同的語句如上,提供關鍵是相同的名稱指定的變量。另外,在你所擁有的例子或我擁有的例子中,導出貓鼬對象是不必要的,在任何情況下,require緩存都會返回它的同一個實例。