我正在尝试使用 nodejs 从 mongodb 集合中检索数据,但我必须请求两次才能获得正确的信息

Posted

技术标签:

【中文标题】我正在尝试使用 nodejs 从 mongodb 集合中检索数据,但我必须请求两次才能获得正确的信息【英文标题】:I am trying to retrieve data from mongodb collection using nodejs but i have to request it twice to get the correct information 【发布时间】:2020-08-06 04:04:09 【问题描述】:

这是我的代码: 我必须请求两次才能获取数据。任何问题?谢谢

var http = require('http');
var url = require('url');
var input = "";
const MongoClient = require('mongodb').MongoClient;
const url2 = "mongodb+srv://ramaty01:password@cluster0-hi4fv.mongodb.net/test?retryWrites=true&w=majority";

http.createServer(function(req, res)
  if (req.url === '/favicon.ico') 
    res.writeHead(200, 'Content-Type': 'image/x-icon' );
    res.end();
    console.log('favicon requested');
    return;
  
  res.writeHead(200, 'Content-Type': 'text/html');
  res.write(
    "<html><head><title> MongoDB and NodeJS</title></head>" + 
    "<body><h1> COMPANY STOCK STICKER</h1><form>" + 
      "<input type='radio' id='company' name='types' value='company' required>" +
      "<label for='company'>Company Name</label><br>" + 
      "<input type='radio' id='stock' name='types' value='stock'>" + 
      "<label for='stock'>Stock Ticker</label><br><br>" +
      "<label for='txt'>Input: </label>" +
      "<input type='text' id='txt' name='txt'><br><br>" +
      "<input type='submit' value='Submit'>" +
    "</form><div id='output'></div></body></html>"
  );
  var qobj = url.parse(req.url, true).query;

  //var items;
  mong(qobj);
  res.write(input);
  res.end()
  input= "";
).listen(8080);

function mong(qobj)

MongoClient.connect(url2,  useUnifiedTopology: true , function(err, db) 
    if(err)  console.log("Connection err: " + err); return; 
    var dbo = db.db("Company");
    var coll = dbo.collection('companies');
    var query;
    var inp = qobj.txt;
    if (qobj.types == "company") 
      query =  "company_name" : inp;
     else if (qobj.types == "stock") 
      query =  "stock_ticker" : inp;
    
    var s = coll.find(query,projection: "company_name":1, "stock_ticker":1, "_id":0).stream();

    s.on("data", function(item) input = input + item.company_name + " " + item.stock_ticker;);
    s.on("end", function() console.log("end of data");  db.close(););
  );



【问题讨论】:

【参考方案1】:

首先,我建议您立即更改您的monogdb atlas 密码,并且下次您在网上发布任何包含敏感信息的内容时要更加小心。

话虽如此,我已经使用 mongodb Atlas 工作了一段时间,我注意到连接通常需要一些时间,这会在您启动服务器时引入一些明显的延迟。这可能是正在发生的事情,并且由于从您的代码中我看不到您的本地服务器在向您的浏览器“提供”请求之前正在等待此连接发生的证据,因此无法保证事件的连续性 为了验证这个假设,我建议您在访问本地服务器之前等待一段时间。这可以使用异步函数轻松解决,或者在启动本地服务器之前链接承诺

【讨论】:

以上是关于我正在尝试使用 nodejs 从 mongodb 集合中检索数据,但我必须请求两次才能获得正确的信息的主要内容,如果未能解决你的问题,请参考以下文章

使用日期从 mongodb-nodejs 驱动程序获取文档

搜索数组 MongoDB NodeJS

尝试在 Nodejs 和 MongoDB 中获取当前登录的用户任务

如何从 nodejs 中的多步表单发布数据并表达到 MongoDB?

连接到 api nodeJS 和 mongoDB

NodeJS:将 JSON 保存到 MongoDB