Jry*_*ryl 7 mongodb node.js express mlab
我正在使用Express.js和MongoLab,我遵循Heroku设置让MongoDB在我的app.js中生成这个代码.
//Mongo on Heroku Setup
var mongo = require('mongodb');
var mongoUri = process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
'mongodb://localhost/mydb';
mongo.Db.connect(mongoUri, function (err, db) {
db.collection('mydocs', function(er, collection) {
collection.insert({'mykey': 'myvalue'}, {safe: true}, function(er,rs) {
});
});
});
Run Code Online (Sandbox Code Playgroud)
我的电子邮件表单(也在app.js中)有以下路由和字段:
//Routes
app.get('/', function(req, res) {
res.render('index', {
title: 'DumbyApp'
});
});
//save new email
app.post('/', function(req, res){
emailProvider.save({
address: req.param('address')
}, function( error, docs) {
res.redirect('/')
});
});
Run Code Online (Sandbox Code Playgroud)
这将在索引页面上呈现新表单,并允许我将其保存在本地但不在生产中,因为我不知道如何设置我的电子邮件集合.谁能跟我走过这个?使用MongoDB和Node.js的新手,所以可以使用一些帮助.
编辑:
在MongoLab数据库接口中,我做了一个collection调用emails.这是正确的行动方针吗?
编辑2:
这里是在app.js中定义EmailProvider以及文件本身.
app.js
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, EmailProvider = require('./emailprovider').EmailProvider;
var emailProvider= new EmailProvider('localhost', 27017);
Run Code Online (Sandbox Code Playgroud)
emailprovider.js
var Db = require('mongodb').Db;
var Connection = require('mongodb').Connection;
var Server = require('mongodb').Server;
var BSON = require('mongodb').BSON;
var ObjectID = require('mongodb').ObjectID;
EmailProvider = function(host, port) {
this.db= new Db('localdb', new Server(host, port, {safe: false}, {auto_reconnect: true}, {}));
this.db.open(function(){});
};
EmailProvider.prototype.getCollection= function(callback) {
this.db.collection('emails', function(error, email_collection) {
if( error ) callback(error);
else callback(null, email_collection);
});
};
//save new email
EmailProvider.prototype.save = function(emails, callback) {
this.getCollection(function(error, email_collection) {
if( error ) callback(error)
else {
if( typeof(emails.address)=="undefined")
emails = [emails];
for( var i =0;i< emails.address;i++ ) {
email = emails[i];
email.created_at = new Date();
}
email_collection.insert(emails, function() {
callback(null, emails);
});
}
});
};
exports.EmailProvider = EmailProvider;
Run Code Online (Sandbox Code Playgroud)
小智 6
虽然第一个代码框中的连接代码似乎是正确的,但emailProvider对象未使用它.相反,在app.js中,EmailProvider连接到localhost:27017,数据库名称在emailprovider.js中硬编码为"localdb".
您要做的是使用EmailProvider中MONGOLAB_URI环境变量中提供的连接信息,该信息已包含主机,端口和数据库名称.
有很多方法可以做到这一点,但一种方法是将连接代码从第一个代码框移动到EmailProvider构造函数中,然后更改构造函数,使其占用URI而不是主机和端口.这样,您可以将MONGOLAB_URI变量传递给app.js中的构造函数.
| 归档时间: |
|
| 查看次数: |
15470 次 |
| 最近记录: |