我想把我用node+mongodb建设的一个网站搭建到百度BAE上面,遇到了一个坑
发布于 3 年前 作者 chtic123 2357 次浏览 来自 问答

在百度BAE上搭建的时候,要连接BAE上面配置的数据库,是mongodb,我用的mongoose这个模块去连接的, 代码如下 279.tmp.jpg 上面的代码是这种形式 mongoose.connect(‘mongodb://user:pass@localhost:port/database’)

但是却一直报下面显示的错 数据库连接失败:MongoError: failed to connect to server [mongo.duapp.com:8908] on first connect

该怎么解决?

9 回复

有没有大神能帮忙填个坑的?

你先把你的mongodb先用数据库工具连接看看能不能够连接上,按照你代码写的配置去连接

@NetLogoclub 我的本地mongodb可以连上的 mongoose.connect(‘mongodb://localhost/database’)就可以连上

我踩过的坑,免费版的mongodb只能采用短连接方式;部署过nodejs博客; 送你一套源代码 var config = require(’…/config’); var dbPath = config.DbPath; var mongoose = require(‘mongoose’); var extend = require(‘mongoose-schema-extend’); var loggertxt = require(’…/utility/loggertxt’).logger;

var options = { db: { native_parser: true }, server: { poolSize: 5, auto_reconnect:true }, user: config.username, pass: config.password } //mongoose.connect(dbPath,options); var db = mongoose.createConnection(); //mongoose.connect(dbPath, options); db.open(config.db_host, config.db_name, config.db_port, options); db.on(‘close’, function(){ loggertxt.error(‘MongoDB被关闭’); //mongoose.connect(dbPath,options); db.open(config.db_host, config.db_name, config.db_port, options); }); db.on(‘connected’, function() { loggertxt.info(‘MongoDB连接成功’); }); db.on(‘disconnected’, function() { loggertxt.info(‘MongoDB连接断开’); //mongoose.connect(dbPath,options); db.open(config.db_host, config.db_name, config.db_port, options); }); db.on(‘error’, function (err) { loggertxt.error('MongoDB连接错误: ’ + err); db.close(); //mongoose.disconnect(); //process.exit(1); }); db.on(‘open’,function(){ loggertxt.info(‘MongoDB被打开’); }); exports.mongoose = mongoose; exports.db = db;

//基础Schema var base = new mongoose.Schema({ //唯一键 _id: {type: String, unique: true}, //创建时间 CreateTime: {type: Date}, //修改时间 ModifyTime: {type: Date} }); exports.base = base;

然后其他请求方式 请求一次连接一次,然后关闭, ‘use strict’;

var mongoose = require(‘mongoose’); var extend = require(‘mongoose-schema-extend’); var util = require(“util”); var loggertxt = require(’…/utility/loggertxt’).logger;

function MongooseKeeper() { this.db = mongoose.createConnection(); this.open_count = 0; } MongooseKeeper.prototype.config = function(conf) { // body… var options = { db: { native_parser: true }, server: { poolSize:4 } };

var constr = "";
if(process.env.MONGO_DB_STR){
    constr = process.env.MONGO_DB_STR ;
}
else{
    //'mongodb://user:pass@localhost:port/database'
    if(conf.userid&&conf.password){
        constr = util.format('mongodb://%s:%s@%s:%d/%s', conf.userid,conf.password,conf.host,conf.port,conf.database);
    }else {
        constr = util.format('mongodb://%s:%d/%s',conf.host,conf.port,conf.database);
    }
}
this.dbUri = constr;
this.options = options;

} MongooseKeeper.prototype.open =function() {

this.open_count++;
if(this.open_count ==1 && this.db.readyState == 0)
{        
    this.db.open(this.dbUri,this.options,function() {
        // body...
        loggertxt.info("db opened");
    });
}

} MongooseKeeper.prototype.close =function() { loggertxt.log(“正在访问的数据库请求量”+this.open_count); this.open_count–; if(this.open_count == 0 ) { this.db.close(function(){ loggertxt.info(“db closed”); }); }

我的博客www.chenyulun.com;什么都没配置; 源代码贴https://cnodejs.org/topic/56f122ba0a5a2cfb3ad1491c#572c077aafd3b34a17ff405e

看我这个项目里边的mongo连接吧,当初也是部署BAE的 https://github.com/giscafer/Ponitor/blob/master/src/db/mongokeeper.js

@giscafer 我按照你的项目里面改了一下连接,把mongokeeper加进去,启动还是报同样的错误诶。。。 CA04.tmp.jpg

@giscafer 噢噢噢噢,解决了~! 谢谢~ 我在本地想连接所以一直报这个错误,bae上面分配的数据库不支持公网连接。。。。

用heroku+mLab啊,同时支持本地和公网访问mongodb

回到顶部