使用Express连接到MongoDB

问题描述:

我无法理解需要做什么才能连接到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

*快递,

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....'); 

     } 
    }); 

你的代码是超级混乱,我可以显示你的我的配置,你可以参考。

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说他得到“错误:发送后无法设置标题。”这意味着他正在对一个请求发送两个响应 –