作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一些记录存储在 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/
由于 Jquery Mobile 在导航时将一些页面保留在 DOM 中,因此在来回时可能会多次访问一个页面。 如果我绑定(bind)到如下所示的页面并在此绑定(bind)内执行我所有的页面逻辑,其中包
我是一名优秀的程序员,十分优秀!