2016-08-30 39 views
0

我的文件夾結構如下:貓鼬和路由器文件

bin/ 
    www 
models/ 
    myMongooseModel.js 
public/ 
    ... 
routes/ 
    index.js 
    anotherroute.js 
views/ 
    ... 
app.js 
package.json 

在文件app.js,我有一些設置(app.setapp.use命令)。在routes/目錄中,有路由文件,每個文件一個文件。在這些文件中,我處理來自用戶的請求。文件bin/www.js設置服務器。

問題是:我如何在這個設置中集成Mongoose,即我應該在哪裏初始化它,以及我應該在路由器文件中包含什麼?

這是最好的方法嗎?

db.js

var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function() { 
    console.log('connected'); 
}); 

index.js

var mongoose = require('mongoose'); 
var MyModel = mongoose.model('myMongooseModel'); 
// do something with MyModel 

如何避免建立數據庫連接之前的請求,怎麼辦?

回答

0

這是增加一些承諾的好機會!據推測,在你的app.js的某個地方,你正在初始化應用程序,給它一個端口,並告訴它開始接受流量。在該步驟之前,您可以使用一個可以等待已建立的連接開始。理想情況下,這個邏輯被模塊化爲它自己的「createConnection.js」。

它看起來是這樣的:

// app.js 
const app = require('express'); 
const mongoose = require('mongoose'); 
const connectPromise = mongoose.connect('myuri'); 
connectPromise.then(() => app.listen(3000)) 

一定要看看http://mongoosejs.com/docs/api.html#index_Mongoose-connect

+0

語法「()=> app.listen(3000)」是什麼意思?它在純JS或NodeJS中工作,還是它是一些特殊的東西? – Green

+0

它是[ES6規範](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)的一部分。它通常在Node 4.x及更高版本中可用。 – broguinn