4

node.jsExpressアプリをMongooseを使用してHerokuのMongoLabデータベースに接続しようとしています。以前app.configureはデータベースURIをでMongoLabURIに設定してproductionいましたが、Herokuログで確認できるようdbURIに、MongoLabURIに確実に設定されています。私は間違いなく自分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 Logs

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
4

2 に答える 2

3

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'
于 2012-08-21T19:36:01.813 に答える
0

Mongoose を使用したことはありませんが、過去に MongoLab で接続の問題が発生したときは、接続を前提とするデータベースとクライアント コードへの接続によって引き起こされた競合状態が原因でした。通常、解決策は、openイベントにバインドするか、接続を必要とする起動を再開する前に、基になるドライバーによって呼び出されるコールバックを提供することです。これは私がしているMongoskinことであり、問​​題はありません。

マイク

于 2012-08-22T03:34:53.103 に答える