【问题标题】:Sending MongoDB results with Node使用 Node 发送 MongoDB 结果
【发布时间】:2026-02-11 00:20:11
【问题描述】:

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

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) 我还不想使用任何其他模块(如 express)。我正在尝试了解如何仅使用 http 模块来实现预期的结果。

【问题讨论】:

    标签: javascript json node.js mongodb


    【解决方案1】:

    我认为这是您尝试编写的科学怪人代码:

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

    【讨论】: