2016-12-15 90 views
1

我無法理解需要做什麼才能連接到MongoDB,因此我可以將一個對象插入到數據庫中。我對使用Express以及MongoDB並不熟悉,但對這兩者還沒有充分的把握。使用Express連接到MongoDB

我使用標準Express設置創建的app.js如下。

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var ex_session = require('express-session'); 
var dateformat = require('dateformat'); 

var MongoClient = require('mongodb').MongoClient; 
var ObjectID = require('mongodb').ObjectID; 
var url = 'mongodb://localhost:27017/contacts' 

var index = require('./routes/index'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', index); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

我index.js如下:什麼我想發生這樣的是,當一個POST請求由/發郵件,連接,以便建立一個插入到MongoDB的製造。

var express = require('express'); 
var router = express.Router(); 
var url = 'mongodb://localhost:27017/contacts'; 
var contacts; 

/* GET home page. */ 
var start = function(req, res, next){ 
    console.log("Starting!"); 
    res.render('mailer',{}); 
} 

router.get('/', start); 
router.get('/mailer', start); 

/* Post mailer Page insert into database*/ 
router.post('/mailer', function(req, res, next){ 
    res.render('thanks'); 
    console.log("Welcome to the Thank You Page"); 

    MongoClient.connect(url, function(err, db){ 
    if(err == NULL){ 
     console.log("Connected to database"); 

     // parse the body of the page and set up object to send to the     
     // database 

    } 
    }); 

    }); 



router.get('/contact', function(req, res){ 
    res.render('contact', {}); 
}) 

module.exports = router; 
+0

通常情況下,你不希望你要查詢每次創建一個新的連接蒙哥/插入,儘管爲了簡單起見,它是可以的。除此之外,你似乎走在正確的軌道上,而且我很難理解你需要幫助的確切內容。 – Belfordz

+0

我每次嘗試連接數據庫時都會收到一個錯誤,說錯誤:發送後無法設置標題。我如何設置它,所以它只連接一次,而不是每次我設置一個帖子。 – kevin

+0

這是非常基本的東西,這很難在簡短的StackOverflow評論或答案中解釋。雖然有很多關於此的教程,但應該很容易找到關於通常如何完成的一些示例。 – svens

回答

1

*快遞,

var mongo = require('mongodb'); 
     var MongoClient = mongo.MongoClient;  
     MongoClient.connect('mongodb://'+DB_USERNAME+':'+DB_PASSWORD+'@'+DB_HOST+':'DB_PORT+'/'+DB_NAME,function(err, db){ 
       if(err) 
       console.log(err); 
       else 
       { 
       console.log('Mongo Conn....'); 

       } 
      }); 

//本地服務器快遞 //在本地服務器DBPASSWOAD和數據庫用戶名不需要

MongoClient.connect('mongodb://'+DB_HOST+':'+DB_PORT+'/'+DB_NAME,function(err, db){ 
     if(err) 
     console.log(err); 
     else 
     { 
     console.log('Mongo Conn....'); 

     } 
    }); 
0

你的代碼是超級混亂,我可以顯示你的我的配置,你可以參考。

db.js 
import mongoose from 'mongoose'; 

export default function connectDB() { 
    mongoose.Promise = global.Promise; 
    mongoose.connect('mongodb://localhost:27017/contacts'); 
    mongoose.connection.once('open', function() { 
     console.log('mongodb connected.'); 
    }); 
}; 


app.js 
import connectDB from "db.js"; 

connectDB(); 


user.model.js 
import mongoose from 'mongoose'; 

const schema = mongoose.Schema({ 
    email: {type: String, required: true}, 
    mobile: {type: String}, 
    password: {type: String, required: true}, 
}); 

const User = mongoose.model('User', schema, 'user'); 

export default User; 

然後在你的路由器文件ü可以調用User.find()或User.update或...

+0

這真的不是那麼混亂,這不會解決他的問題,這與快速中間件訂單比Mongo更有關 –

+0

我沒有完全理解「更多與中間件的表示順序比Mongo更有關係」的意思,但在路由器功能中的「MongoClient.connect」顯然不是一個好的編碼習慣。 –

+0

OP說他得到「錯誤:發送後無法設置標題。」這意味着他正在對一個請求發送兩個響應 –