Как мне захватить запрос MongoDB в виде строки и отобразить его на моей странице Node JS (с помощью драйвера mongojs)?

Я хотел бы иметь возможность запрашивать мою mongoDB и отображать этот результат на моей веб-странице, созданной с помощью Node... сейчас я использую драйвер mongojs - я нашел, что драйвер очень очень хорош для помещения данных в БД - синтаксис такой же, как у оболочки Mongo, и я могу поместить код прямо в моем приложении Node. Эта задача... просто показать результаты запроса на веб-странице или даже на консоли оказалась очень сложной. Вот соответствующие части моего кода и то, что я попробовал.

var databaseUrl = "test"; // "username:password@example.com/mydb"
var collections = ["graph1"]
var db = require("mongojs").connect(databaseUrl, collections);

console.log(db.graph1.find());

Я сделал коллекцию под названием graph1, и в командной строке mongo это дает результаты. Обратите внимание... Я хочу отобразить его в HTML... но я полагаю, что если я смогу распечатать его на консоли, я смогу получить его в своем HTML.

В настоящее время выводит это:

{_oncursor: { get: [Function], put: [Function] } } 

Какой-то прототип для того, что я на самом деле хочу, а именно:

{ "x" : "0", "y" : "1343725568", "_id" : ObjectId("4fba6....") }

2 ответа

Решение

Попробуй это:

    db.graph1.find( {}, function(err, result ){ 
    if (err || !result ) console.log(" an error has occurred" );
    else {
    console.log(result);
    }
    });

Журнал консоли, который у вас был, печатал возвращаемое значение db.graph1.find(), являющееся прототипом его функции. Он не вернет ничего полезного, потому что это асинхронная функция. Единственный способ сделать полезные вещи с данными, которые он получает, состоит в том, чтобы передать обратный вызов, в котором будут обрабатываться данные:

    db.graph1.find( { //what you want to search for here }, callback);

    function callback(result_from_mongo) {
    // do stuff here with result_from_mongo
    }

Для унаследованности, каждый должен знать, что единственный раз, когда вы можете манипулировать результатами запроса, это В ЗВОНОКЕ... так что не устанавливайте его в переменную, которую потом будете обманывать, только в обратном вызове)-=.

Используйте следующее, чтобы сделать результат запроса строкой без проблем. Это стандартная библиотека.

  var results_not_ugly_or_messed_up = (JSON.stringify(result));

Если вы хотите быть гетто и использовать свои результаты вне обратного вызова, вы всегда можете вызвать perl/python/sh/bat/ любой другой сценарий с вашим "stringified" результатом (в этом примере results_not_ugly_or_messed_up) в качестве параметра для его сохранения в файл и т. д., чтобы прочитать и затем использовать как вам угодно.

Для полного реального примера:

db.newguestbook.find({"Name" : /[Aa]/ },[],function(err,p) //newguestbook is a collection I have    
//you will need to change that unless you make a collection called newguestbook
{
    cursor = p;
    console.log(cursor);
    console.log(JSON.stringify(cursor))); //We have a nice string, see?
    var exec = require('child_process').exec;
    exec("perl writetofile.pl " + JSON.stringify(cursor) , function(err, 
    stdout, stderr)
    {
        console.log("Perl run to store this result in a file");
    });

});
}
Другие вопросы по тегам