为Heroku上的Mongo Labs数据库配置Node.js连接字符串 [英] Configuring Node.js Connection String for Mongo Labs Database on Heroku

查看:141
本文介绍了为Heroku上的Mongo Labs数据库配置Node.js连接字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的web应用程序(构建于Node.js和Express上)在本地工作正常,但是当我将它部署到Heroku时,我无法连接到Mongo Labs数据库。我更改了我的'app.js'文件中的连接字符串,以正确反映新Heroku Mongo Labs数据库的URI(假冒的用户名和密码在下面替换)。我也尝试了几种stackoverlow解决方案无法连接到mongolab在heroku上使用node.js 以及 https ://devcenter.heroku.com/articles/getting-started-with-nodejs#using-mongodb ,但这些似乎也不工作。我怀疑这有点不同,因为我使用的是Mongoskin。

原始连接:



var db = mongo.db (mongodb:// localhost:27017 / userdir,{native_parser:true});



更改为新连接:



var db = mongo.db(mongodb:// user:pass@dbh23.mongolab.com:27237 / heroku_app24581691,{native_parser:true });



任何关于我在这里失踪的想法?

  var express = require('express'); 
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

//数据库
var mongo = require('mongoskin');
var db = mongo.db(mongodb:// user:pass@dbh23.mongolab.com:27237 / heroku_app24581691,{native_parser:true});

//让路由器可以访问数据库

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

var app = express();
$ b $ //查看引擎设置
app.set('views',path.join(__ dirname,'views'));
app.set('view engine','jade');

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__ dirname,'public')));
$ b $ //让数据库可以访问路由器
app.use(function(req,res,next){
req.db = db;
next() ;
});

app.use('/',routes);
app.use('/ users',users);
$ b $ //捕获404并转发到错误处理程序
app.use(function(req,res,next){
var err = new Error('Not Found')) ;
err.status = 404;
next(err);
});

///错误处理程序

//开发错误处理程序
//将打印stacktrace
if(app.get('env')= =='development'){
app.use(function(err,req,res,next){
res.status(err.status || 500);
res.render( '错误',{
消息:err.message,
错误:err
});
});


//生产错误处理程序
//没有堆栈跟踪泄漏给用户
app.use(函数(err,req,res,next){
res.status(err.status || 500);
res.render('error',{
message:err.message,
error:{}
} );
});

module.exports = app;


解决方案

我在我的教程的评论中回答了这个问题,但我也会在这里回答:我认为您可能需要使用您链接的Heroku ducomentation中引用的环境变量:process.env.MONGOLAB_URI ...我的猜测是Heroku不希望您将您的用户名/密码直接输入到代码中(并且有很好的理由,因为这不是特别安全)。给它一个镜头:

  var db = mongo.db(process.env.MONGOLAB_URI,{native_parser:true}); 

并查看结果如何。


My web app (built on Node.js and Express) works fine locally, but when I deploy it to Heroku, I'm unable to connect to my Mongo Labs database. I've changed the connection string in my 'app.js' file to properly reflect the URI of the new Heroku Mongo Labs database (fake username and password substituted below). I've also tried several stackoverlow solutions can't connect to mongolab with node.js on heroku as well as https://devcenter.heroku.com/articles/getting-started-with-nodejs#using-mongodb but those don't seem to work either. I suspect this is slightly different because I'm using Mongoskin.

The original connection:

var db = mongo.db("mongodb://localhost:27017/userdir", {native_parser:true});

changed to the new connection:

var db = mongo.db("mongodb://user:pass@dbh23.mongolab.com:27237/heroku_app24581691",{native_parser:true});

Any ideas as to what I'm missing here?

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

// Database
var mongo = require('mongoskin');
var db = mongo.db("mongodb://user:pass@dbh23.mongolab.com:27237/heroku_app24581691", {native_parser:true});

// Make db accessible to the router

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

var app = express();

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

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// Make db accessible to the router
app.use(function(req,res,next){
    req.db = db;
    next();
});

app.use('/', routes);
app.use('/users', users);

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

/// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

module.exports = app;

解决方案

I answered this in the comments on my tutorial, but I'll answer it here too: I think it's likely that you need to use the environment variable referenced in the Heroku ducomentation you linked: process.env.MONGOLAB_URI ... my guess is that Heroku doesn't want you putting your username/password directly into the code (and with good reason, since that's not particularly secure). Give it a shot with:

var db = mongo.db(process.env.MONGOLAB_URI, {native_parser:true});

and see how that works out.

这篇关于为Heroku上的Mongo Labs数据库配置Node.js连接字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆