Как мне захватить запрос 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");
});
});
}