setup nodejs node mongodb_uri mongo deploy node.js mongodb heroku express mongoskin

nodejs - Configuración de la cadena de conexión Node.js para la base de datos de Mongo Labs en Heroku



mongodb heroku (1)

Respondí esto en los comentarios de mi tutorial, pero también lo responderé aquí: creo que es probable que necesite usar la variable de entorno a la que se hace referencia en la compilación de Heroku que ha vinculado: process.env.MONGOLAB_URI ... mi suposición es que Heroku no quiere que pongas tu nombre de usuario / contraseña directamente en el código (y con razón, ya que no es particularmente seguro). Pruébalo con:

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

y ve cómo funciona eso.

Mi aplicación web (construida en Node.js y Express) funciona bien localmente, pero cuando la despliego a Heroku, no puedo conectarme a mi base de datos de Mongo Labs. Cambié la cadena de conexión en mi archivo ''app.js'' para reflejar correctamente el URI de la nueva base de datos de Heroku Mongo Labs (nombre de usuario y contraseña falsos sustituidos a continuación). También probé varias soluciones de stackoverlow que no pueden conectarse a mongolab con node.js en heroku , así como https://devcenter.heroku.com/articles/getting-started-with-nodejs#using-mongodb, pero esas no lo hacen Parece que funciona bien. Sospecho que esto es un poco diferente porque estoy usando Mongoskin.

La conexión original:

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

cambiado a la nueva conexión:

var db = mongo.db("mongodb://user:[email protected]:27237/heroku_app24581691",{native_parser:true});

¿Alguna idea de lo que me falta aquí?

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:[email protected]: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;