使用Node发送MongoDB结果

时间:2016-11-02 04:20:43

标签: javascript json node.js mongodb

我使用以下非常基本的脚本创建服务器:

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模块实现所需的结果。

1 个答案:

答案 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已被删除,因为我不确定您要用它来完成什么。