Я пытаюсь получить данные из коллекции mongodb, используя nodejs, но мне нужно запросить их дважды, чтобы получить правильную информацию - PullRequest
2 голосов
/ 23 апреля 2020

Это мой код: мне нужно дважды запросить данные. Любая проблема? Спасибо

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 Ответ

1 голос
/ 23 апреля 2020

Прежде всего, я рекомендую вам немедленно изменить свой пароль к атласу monogdb, и будьте более осторожны в следующий раз, когда будете публиковать в Интернете что-либо с конфиденциальной информацией.

С учетом сказанного, поработав с Некоторое время назад Atlas mongodb, я заметил, что соединение обычно занимает некоторое время, и это приводит к некоторой заметной задержке в первый раз, когда вы запускаете свой сервер. Вероятно, это то, что происходит, и поскольку из вашего кода я не вижу доказательств того, что ваш локальный сервер ожидает, пока это соединение произойдет, прежде чем «обслуживать» запросы к вашему браузеру, нет никакой гарантии последовательности событий. Чтобы проверить это Гипотеза, я предлагаю вам подождать некоторое время, прежде чем получить доступ к локальному серверу. Это можно легко решить с помощью функции asyn c или создания цепочки обещаний перед запуском локального сервера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...