gpt4 book ai didi

mongodb - 如何在 EC2 环境中使用 node-mongodb-native 在 Node.js 服务器上设置 MongoDB?

转载 作者:IT老高 更新时间:2023-10-28 13:12:08 26 4
gpt4 key购买 nike

我在这里得到了很多人的帮助,现在我想回馈一下。对于那些无法让 Node.js 服务器与 MongoDB 一起工作的人,这是我所做的。

最佳答案

这最初是由提问者发布的。一个模组在评论中要求他将其发布为答案,但没有得到回应。所以,我清理了它并自己发布。

当您查看代码时,您会注意到 createServer 代码位于 db.open 中。反了就不行了。另外,不要关闭数据库连接。否则,第一次之后,db连接将不会再次打开。 (当然,db.open 是在 createServer 之外声明的。)我不知道为什么 createServerdb.open。我想这可能与没有打开太多数据库连接有关?

另外,我面临的一个问题是,当我通过 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”

运行db进程:

$ ./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 - 如何在 EC2 环境中使用 node-mongodb-native 在 Node.js 服务器上设置 MongoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4789045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com