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;