我使用以下非常基本的脚本创建服务器:
var http = require('http');
var queryResult = '';
const PORT=8080;
function handleRequest(request, response){
fetchResult("user1"); //string is a placeholder, but works for now
setTimeout(function() {
// **POSSIBLE SOLUTION SPOT A**
response.end("some text");
}, 1000);
}
var server = http.createServer(handleRequest);
server.listen(PORT, function(){});
我之所以打破这个,只是因为我觉得它更容易阅读。但在同一页面上我还有以下内容:
var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/my_database_name';
function fetchResult(query){
MongoClient.connect(url, function (err, db) {
if (!err) {
var collection = db.collection('users');
collection.find({name: query}).toArray(function (err, result) {
if (result.length)
queryResult = result;
// **POSSIBLE SOLUTION SPOT B**
db.close();
});
}
});
}
这很有效。结果是一个具有我的数据库值的对象。并且服务器能够编写"一些文本"当有人提出要求时但是,我无法得到它,以便在用户发出请求时将对象写入页面或以其他方式传输。这样做的最佳方式是什么?
注意: 1)我知道在这里使用超时是非常糟糕的。我无法弄清楚如何使回调正常工作,并且它适用于此示例。一旦我解决了上面描述的问题,我就会自己解决这个问题。
2)我认为JSON.stringify()可能在这方面发挥作用,但我无法弄清楚如何处理它。
3)我还不想使用任何其他模块(如快递)。我试图了解如何仅通过http模块实现所需的结果。
答案 0 :(得分:0)
我认为这是你要写的Frankenstein代码:
var http = require('http');
var mongodb = require('mongodb');
const PORT=8080;
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/my_database_name';
function handleRequest(request, response){
fetchResult("user1");
MongoClient.connect(url, function (err, db) {
if (!err) {
var collection = db.collection('users');
collection.find({name: query}).toArray(function (err, result) {
if (result.length)
response.end(JSON.stringify(result));
db.close();
});
}
});
}
var server = http.createServer(handleRequest);
server.listen(PORT, function(){});
正如你自己所说,不要在生产中使用它 - 它是一个混乱,难以理解的blob。 setTimeout
已被删除,因为我不确定您要用它来完成什么。