Heroku 上的 Node.js Express 应用程序无法使用 Mongoose 连接到 MongoLab 数据库

标签 node.js mongodb heroku express mongoose

我正在尝试让我的 node.js Express 应用程序使用 Mongoose 连接到 Heroku 上的 MongoLab 数据库。我已经使用 app.configure 将我的数据库 URI 设置为 production 上的 MongoLab URI,正如您在 Heroku 日志中看到的那样,它肯定设置了 dbURI 到 MongoLab URI。我肯定已经将我的 NODE_ENV 设置为 production。我的问题是什么?

app.js:

var express = require('express');
var mongoose = require('mongoose')
  , dbURI = 'localhost';
var app = express();

app.configure('production', function () {
    console.log("production!");
    dbURI = 'mongodb://brad.ross.35:Brad1234@ds031347.mongolab.com:31347/heroku_app6861425';
    console.log(dbURI);
});

mongoose.connect(dbURI, 'test');
mongoose.connection.on('error', console.error.bind(console, 'connection error:'));

var postSchema = new mongoose.Schema({
    body: String
});

var Post = mongoose.model('Post', postSchema);

app.configure(function () {
    //app.use(express.logger());
    app.use(express.bodyParser());
    app.use(express.static(__dirname + '/static'));
});

app.set('views', __dirname + '/views');
app.set('view engine','jade');

app.get('/', function(request, response) {
    response.render('index');
});

app.post('/result', function(request, response) {
    var post = new Post({body: request.body.text});
    post.save(function (err) {
        if (err) {
            console.log("error!");
        } else {
            console.log("saved!");
        }
    });

    Post.find(function (err, posts) {
        if (!err) {
            console.log("found!");
            console.log(posts);
            response.render('result', {posts: posts});
        } else {
            console.log("error!");
            response.render('result', {posts: []});
        }
    });
});

app.get('/result', function (request, response) {
    Post.find(function (err, posts) {
        if (!err) {
            console.log("found!");
            console.log(posts);
            response.render('result', {posts: posts});
        } else {
            console.log("error!");
            response.render('result', {posts: []});
        }
    });
});

app.listen(process.env.PORT || 5000);

Heroku 日志:

2012-08-21T16:52:21+00:00 heroku[web.1]: State changed from crashed to starting
2012-08-21T16:52:22+00:00 heroku[slugc]: Slug compilation finished
2012-08-21T16:52:23+00:00 heroku[web.1]: Starting process with command `node app.js`
2012-08-21T16:52:24+00:00 app[web.1]: production!
2012-08-21T16:52:24+00:00 app[web.1]: mongodb://brad.ross.35:PASSWORD@ds031347.mongolab.com:31347/heroku_app6861425
2012-08-21T16:52:24+00:00 app[web.1]: connection error: [Error: failed to connect to [ds031347.mongolab.com:31347/heroku_app6861425:27017]]
2012-08-21T16:52:25+00:00 heroku[web.1]: State changed from starting to up

最佳答案

传递 URI 时,无需单独传递数据库名称(这会使 mongoose 感到困惑)。

就这样

var uri = 'mongodb://brad.ross.35:Brad1234@ds031347.mongolab.com:31347/heroku_app6861425'
mongoose.connect(uri)

要使用测试数据库,请更改您的 uri:

var uri = 'mongodb://brad.ross.35:Brad1234@ds031347.mongolab.com:31347/test'

关于Heroku 上的 Node.js Express 应用程序无法使用 Mongoose 连接到 MongoLab 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059661/

相关文章:

node.js - 我的 Karma 配置跳过了 Jasmine 单元测试

javascript - 服务器未发送响应

java - 在 Wildfly 10.1.0 上部署 Hibernate OGM 以实现 Mongodb 持久性时出现问题

mongodb - mongodb中集合的最大大小是多少

ruby-on-rails - 无法在 Rails 中创建具有带前导点的段的路由(以验证 Let's Encrypt)

ruby-on-rails - 管道 Assets 预编译禁用似乎不起作用

javascript - 为所有请求返回索引文件

node.js - 在 Mongoose 中查询虚拟属性

Heroku 项目的 git clone 失败

node.js - Node.js REPL 的问题