gpt4 book ai didi

mongodb - 寻求有关在 Node.JS 中读取 MongoDB 的帮助

转载 作者:可可西里 更新时间:2023-11-01 09:10:27 24 4
gpt4 key购买 nike

我有一些记录存储在 MongoDB 中,我试图通过 Node.JS http 服务器将它们输出到浏览器窗口。我认为我已经完成了很好的部分,但我遗漏了一些阻碍它实际工作的小东西。

下面的代码使用 node-mongo-native 连接到数据库。

如果周围有人可以帮助我与在 Node 中工作建立最后的联系,我将不胜感激。公平地说,我相信这仅仅是个开始。

var sys  = require("sys");
var test = require("assert");
var http = require('http');

var Db = require('../lib/mongodb').Db,
Connection = require('../lib/mongodb').Connection,
Server = require('../lib/mongodb').Server,
//BSON = require('../lib/mongodb').BSONPure;
BSON = require('../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;

sys.puts("Connecting to " + host + ":" + port);

function PutItem(err, item){
var result = "";
if(item != null) {
for (key in item) {
result += key + '=' + item[key];
}
}
// sys.puts(sys.inspect(item)) // debug output
return result;
}

function ReadTest(){
var db = new Db('mydb', new Server(host, port, {}), {native_parser:true});
var result = "";
db.open(function (err, db) {
db.collection('test', function(err, collection) {
collection.find(function (err, cursor){
cursor.each( function (err, item) {
result += PutItem(err, item);
});
});
});
});
return result;
}

http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("foo"+ReadTest());
}).listen(8124);
console.log('Server running on 8124');

资料来源:- mongo连接代码: https://github.com/christkv/node-mongodb-native/blob/master/examples/simple.js- Node 。 http代码:nodejs.org

编辑更正的代码

感谢下面的 Mic 让我朝着正确的方向前进。对于任何感兴趣的人,更正的解决方案在这里:

function ReadTest(res){
var db = new Db('mydb', new Server(host, port, {}), {native_parser:true});
var result = "";
res.write("in readtest\n");
db.open(function (err, db) {
res.write("now open\n");
db.collection('test', function(err, collection) {
res.write("in collection\n");
collection.find(function (err, cursor){
res.write("found\n");
cursor.each( function (err, item) {
res.write("now open\n");
var x = PutItem(err, item);
sys.puts(x);
res.write(x);
if (item == null) {
res.end('foo');
}
});
});
});
});
}

http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write("start\n");
ReadTest(res);
}).listen(8124);
console.log('Server running on 8124');

最佳答案

我的猜测是您正在返回结果、写入响应并在从数据库中获取任何内容之前关闭连接。

一种解决方案是将响应对象传递到您实际需要它的地方,例如:

function readTest(res) {
db.open(function (err, db) {
db.collection('test', function(err, collection) {
collection.find(function (err, cursor) {
res.writeHead(200, {'Content-type' : 'text/plain'});
cursor.each( function (err, item) { res.write(item); });
res.end();
...

当然,您还应该处理错误并尽量避免嵌套太多级别,但那是另一回事了。

关于mongodb - 寻求有关在 Node.JS 中读取 MongoDB 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526246/

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