Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Heroku上为Mongo Labs数据库配置Node.js连接字符串_Node.js_Mongodb_Heroku_Express_Mongoskin - Fatal编程技术网

在Heroku上为Mongo Labs数据库配置Node.js连接字符串

在Heroku上为Mongo Labs数据库配置Node.js连接字符串,node.js,mongodb,heroku,express,mongoskin,Node.js,Mongodb,Heroku,Express,Mongoskin,我的web应用程序(构建在Node.js和Express上)在本地运行良好,但当我将其部署到Heroku时,我无法连接到我的Mongo Labs数据库。我已经更改了“app.js”文件中的连接字符串,以正确反映新Heroku Mongo Labs数据库的URI(下面替换了假用户名和密码)。我也尝试过几种stackoverlow解决方案,但它们似乎也不起作用。我怀疑这有点不同,因为我使用的是Mongoskin 原始连接: var db=mongo.db(“mongodb://localhost:

我的web应用程序(构建在Node.js和Express上)在本地运行良好,但当我将其部署到Heroku时,我无法连接到我的Mongo Labs数据库。我已经更改了“app.js”文件中的连接字符串,以正确反映新Heroku Mongo Labs数据库的URI(下面替换了假用户名和密码)。我也尝试过几种stackoverlow解决方案,但它们似乎也不起作用。我怀疑这有点不同,因为我使用的是Mongoskin

原始连接:

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

已更改为新连接:

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

你知道我在这里遗漏了什么吗

var express=require('express');
var path=require('path');
var favicon=require('static-favicon');
var记录器=需要('morgan');
var cookieParser=require('cookie-parser');
var bodyParser=require('body-parser');
//数据库
var mongo=require(‘mongoskin’);
var db=mongo.db(“mongodb://user:pass@db23.mongolab.com:27237/heroku_app24581691“,{native_parser:true});
//使路由器可以访问数据库
变量路由=要求('./路由/索引');
var users=require(“./routes/users”);
var-app=express();
//查看引擎设置
app.set('views',path.join('views');
应用程序集(“查看引擎”、“翡翠”);
应用程序使用(favicon());
应用程序使用(记录器(“开发”);
use(bodyParser.json());
use(bodyParser.urlencoded());
使用(cookieParser());
app.use(express.static(path.join(uu dirname,'public'));
//使路由器可以访问数据库
应用程序使用(功能(请求、恢复、下一步){
req.db=db;
next();
});
应用程序使用(“/”,路线);
应用程序使用('/users',users);
///捕获404并转发到错误处理程序
应用程序使用(功能(请求、恢复、下一步){
var err=新错误(“未找到”);
err.status=404;
下一个(错误);
});
///错误处理程序
//开发错误处理程序
//将打印stacktrace
if(app.get('env')='development'){
应用程序使用(功能(错误、请求、恢复、下一步){
资源状态(资源状态| | 500);
res.render('错误'{
message:err.message,
错误:错误
});
});
}
//生产错误处理程序
//没有堆栈跟踪泄漏给用户
应用程序使用(功能(错误、请求、恢复、下一步){
资源状态(资源状态| | 500);
res.render('错误'{
message:err.message,
错误:{}
});
});
module.exports=app;

我在教程的评论中回答了这个问题,但我也将在这里回答:我认为您可能需要使用您链接的Heroku文件中引用的环境变量:process.env.MONGOLAB\u URI。。。我的猜测是Heroku不希望您将用户名/密码直接输入到代码中(这是有充分理由的,因为这并不特别安全)。试一试:

var db = mongo.db(process.env.MONGOLAB_URI, {native_parser:true});
看看结果如何