急【新手求教】有没有在BAE用Node.js和MongoDB 搭建网站的,为啥本我的程序在本地运行很好,就是部属到BAE上不成功。
发布于 8个月前 作者 FuGardenia 1311 次浏览 最后一次编辑是 7个月前
本人也是前端爱好者,最近在用Node.js和MongoDB搭建自己的网站,本地运行很好。
按照BAE上修改链接方式后,访问网站出错,提示:

可以访问 http://siblim.duapp.com/ 查看错误如下 Error: Error connecting to database: failed to connect to [127.0.0.1:27017] at null. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/server.js:553:74) at EventEmitter.emit (events.js:106:17) at null. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:140:15) at EventEmitter.emit (events.js:98:17) at Socket. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/connection.js:512:10) at Socket.EventEmitter.emit (events.js:95:17) at net.js:441:14 at process._tickCallback (node.js:415:13)

但是本地链接代码,个人已经修改了。怎么还会链接failed to connect to [127.0.0.1:27017]

//db.js 链接代码修改如下 var Db = require(‘mongodb’).Db; var Connection = require(‘mongodb’).Connection; var Server = require(‘mongodb’).Server; //数据库连接信息host,port,user,pwd var db_name = 'MOOEovYoNmLKlMCIfRdt’; // 数据库名,从云平台获取 var db_host = 'mongo.duapp.com’; // 数据库地址 var db_port = '8908’; // 数据库端口 var username = '。。。’; // 用户名(API KEY) var password = '。。。’; // 密码(Secret KEY)

module.exports = new Db(db_name, new Server(db_host, db_port, {}), {w: 1});

//post.js 调用代码如下 var mongodb = require(‘./db’); var moment = require(‘moment’);//时间模块 var formidable = require(“formidable”);//处理POST数据模块

function Post(username, post, target_path, time){ this.user = username; this.post = post; this.img = target_path; if (time) { this.time = time; }else{ this.time = new moment().format(“YYYY-MM-DD HH:mm:ss”); //console.log(moment().format()); }

}; module.exports = Post;

Post.prototype.save = function save(callback) { // 存入 MongoDB的文档 var post = { user: this.user, post: this.post, img: this.img, time: this.time, }; mongodb.open(function(err,db){ if(err) return callback(err); //读取post集合 db.authenticate("。。。", "。。。", function(err, result) { if (err) { db.close(); console.log(err); return;
} db.collection('posts’,function(err, collection){ if (err) { mongodb.close(); return callback(err); }; //为user属性添加索引 collection.ensureIndex(‘user’); //写入post文档 collection.insert(post, {safe: true}, function(err, post){ mongodb.close(); callback(err, post); }); }); });

});

};

Post.get = function get(username, callback){ mongodb.open(function(err, db){ if (err) {return callback(err)}; db.authenticate("。。。", "。。。", function(err, result) { if (err) { db.close(); console.log(err); return;
} db.collection('posts’, function(err, collection){ if(err) { mongodb.close(); return callback(err); }; //查找user属性为username的文档,如果username是null则匹配全部 var query = {}; if (username) { query.user = username; }; collection.find(query).sort({time: -1}).limit(30).toArray(function(err, docs){ mongodb.close(); if(err) { callback(err,null); };

                //封装posts为post对象
                var posts = [];
                docs.forEach(function(doc, index){
                    var post = new Post(doc.user, doc.post, doc.img,doc.time);
                    posts.push(post);
                });
                callback(null,posts);
            });
        });
    }); 
});

}

12 回复

数据库的地址要改为bae的mongodb提供给你的地址。还有,bae的mongo貌似不支持长连接

bae提供的地址就是mongo.duapp.com,官方连接方式就是长连接的

我用的很正常,这个明显是你的bae上配置不正常,连的依然是127.0.0.1 我现在更喜欢node.js了,同样的功能我的上一个原型使用的python+django+mysql,现在使用node.js+express+monogoose。node.js版本可以支持250个模拟并发,而以前只支持50个不到

谢谢啦。我是新手,可不可以把您部分的app.js代码,数据库连接代码,和少量数据库代码贴给我看看,学习学习…

非常感谢。。。

遇到了和楼主一样的问题。请问楼主你这个问题怎么解决?

===================== 这个问题解决了。是一位内在使用connect-mongo来做存储session的时候,也需要链接数据库。这里需要填入你的配置。

但是同时,出现了新的问题。正在解决当中。

感谢,我也是新手,以后多多交流~~ 我的问题还没解决,正在弄~~

对的,是你说的问题,我也解决了。但是遇到了 访问的时候 无法加载,是不是 百度服务器的问题。。

@FuGardenia 你bae最后是不是 显示 “no open connections” 不知道你怎么解决的啊

@racyily BAE的问题 系统发布之后不到一会就挂了 显示500 no open connections 求帮忙啊 谢谢

一般这种环境都是不支持长连接的

你看看这篇文章,我就是按照这篇文章解决的! http://cnodejs.org/topic/53be80a229bac3c80f09d6a9

回到顶部