我在这里得到了很多人的帮助,现在我想回馈。对于那些使Node.js服务器无法与MongoDB一起使用的问题,这就是我所做的。
这最初是由问题提问者发布的。 一个mod在评论中要求他将其发布为答案,但未得到任何回应。因此,我清理了它并亲自发布。
查看代码时,您会注意到该createServer
代码位于内部db.open
。如果您将其撤消,它将不起作用。另外, 请勿关闭
数据库连接。否则,在第一次之后,数据库连接将不会再次打开。(当然,db.open
是在外部声明的createServer
。)我不知道为什么createServer
在内部db.open
。我想这可能与不打开太多html" target="_blank">数据库连接有关?
另外,我面临的一个问题是,当我通过SSH运行它时,即使我在后台运行服务器(例如$ node server.js &
),在2.5小时后,服务器也会死机(虽然不是实例)。我不确定这是因为终端连接还是其他原因。
这是程序和代码
环境:EC2,AMS-Linux-AMI
目的:接收一个HTTP请求并将查询,IP和时间戳记录到MongoDB中。
脚步
1)创建实例(服务器)后,安装gcc。
$ yum install gcc-c++
2)下载Node.js文件并解压缩。(我使用的是2.6版。)
$ curl -O http://nodejs.org/dist/node-v0.2.6.tar.gz
$ tar -xzf node-v0.2.6.tar.gz
我将解压缩的文件夹重命名为“ nodejs”
$ cd nodejs
$ sudo ./configure --without-ssl
$ sudo make
$ sudo make install
make
需要一段时间。…之后,您可以尝试在nodejs.org中运行示例
3)安装MongoDB。我安装的版本是1.6.5,而不是1.7。
$ curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz
$ tar -xzf mongodb-linux-x86_64-1.6.5.tgz
$ sudo mkdir /data/db/r01/
我将文件夹重命名为“ mongodb”
运行数据库进程:
$ ./mongodb/bin/mongod --dbpath /data/db/r01/
然后,如果您愿意,可以运行并尝试命令行。请参阅MongoDB的网站。
4)我建议您根据实例创建自己的AIM。需要20分钟。然后,重新创建安装并再次运行MongoDB。
5)安装 node-mongodb-native
$ curl -O https://download.github.com/christkv-node-mongodb-native-V0.8.1-91-g54525d8.tar.gz
$ tar -xzf christkv-node-mongodb-native-V0.8.1-91-g54525d8.tar.gz
我将文件夹重命名为 node-mongodb-native
$ cd node-mongodb-native
$ make
6)这是服务器的代码:
GLOBAL.DEBUG = true;
global.inData = '';
var http = require('http');
sys = require("sys");
/* set up DB */
var Db = require('./node-mongodb-native/lib/mongodb').Db,
Connection = require('./node-mongodb-native/lib/mongodb').Connection,
Server = require('./node-mongodb-native/lib/mongodb').Server,
BSON = require('./node-mongodb-native/lib/mongodb').BSONNative;
var host = process.env['MONGO_NODE_DRIVER_HOST'] != null ? process.env['MONGO_NODE_DRIVER_HOST'] : 'localhost';
var port = process.env['MONGO_NODE_DRIVER_PORT'] != null ? process.env['MONGO_NODE_DRIVER_PORT'] : Connection.DEFAULT_PORT;
var db = new Db('test01', new Server(host, port, {}), {native_parser:true});
db.open(function(err, db) {
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
global.inData = {'p':'', 'url':''};
// get IP address
var ipAddress = req.connection.remoteAddress;
global.inData.ip = ipAddress;
// date time
var d = new Date();
var ts = d.valueOf();
global.inData.ts = ts;
// get the http query
var qs = {};
qs = require('url').parse(req.url, true);
if (qs.query !== null) {
for (var key in qs.query) {
if (key == 'p') {
global.inData.p = qs.query[key];
}
if (key == 'url') {
global.inData.url = qs.query[key];
}
}
}
if (global.inData.p == '' && global.inData.url == '') {
res.end("");
} else {
db.collection('clickCount', function(err, collection) {
if (err) {
console.log('is error \n' + err);
}
collection.insert({'p':global.inData.p,
'url':global.inData.url,
'ip':global.inData.ip,
'ts':global.inData.ts});
res.end("");
//db.close(); // DO NOT CLOSE THE CONNECTION
});
}
}).listen(8080);
});
console.log('Server running at whatever host :8080');
这可能不是 完美的
代码,但可以运行。我仍然不习惯“嵌套”或LISP类型的编码样式。这就是为什么我作弊并习惯于global.inData
传递数据的原因。:)
不要忘记将其放在res.end("")
适当的位置(您认为HTTP请求调用应在此结束)。
本文向大家介绍如何设置MongoDB Java环境?,包括了如何设置MongoDB Java环境?的使用技巧和注意事项,需要的朋友参考一下 安装和运行MongoDB 访问MongoDB主页,在“软件”(下拉列表)中,选择“社区服务器”。 在“ MongoDB社区服务器”页面中,指定平台详细信息并下载与您的平台兼容的MongoDB服务器。 安装下载的软件,并在C驱动器中创建一个名为data的文件夹/
我正在使用react-本地构建一个跨平台的应用程序,但我不知道如何设置环境变量,以便我可以为不同的环境拥有不同的常量。 例子:
问题内容: 如您所见,我是新来的… 我建立了第一个网站,建立了第一个Node.js服务器来为其提供服务,然后将所有内容实时发布到EC2上。 我在我的EC2 IP地址上测试了所有内容,并且似乎一切正常。 现在直到现在,我一直在本地测试我的应用程序,因此每当我关闭终端时,app.js都将停止运行,因此在localhost上将不会提供任何服务,这是有道理的。 现在,我的服务器位于EC2上,每当我关闭终端
问题内容: 使用JetBrains的WebStorm官方Node插件(以及它们的其他IDE)运行Node.js应用程序时,是否可以设置环境变量? 问题答案: 不,从WebStorm不可能,应该在系统中定义环境变量。 更新:在新版本中,可以在“运行/调试”配置中设置环境变量。
问题内容: 我使用以下行启动了node.js服务器来设置端口: 这意味着,它应该像本地运行时那样读取PORT env变量或默认为8080。它们都不在Heroku上发生,并且服务器始终使用默认端口80。如何更改该端口? 问题答案: 你不能 Heroku设置您应该绑定的PORT变量,并在tcp / 80上进行侦听。