Buduję aplikację przy użyciu MongoDB, kątowej, ekspresowej i węzła (stos MEAN).Określanie parametrów kwerendy Mongo na kontrolerze klienta (MEAN.JS)
Do generowania aplikacji użyłem generatora MEAN.JS.
Będę używał modułu articles jako punktu odniesienia.
Załóżmy, że mam 7000 rekordów w kolekcji artykułów, a każdy rekord ma przypisaną datę. Nieefektywne jest ładowanie wszystkich 7000 rekordów do pamięci za każdym razem, gdy ładuję stronę, aby wyświetlić rekordy w tabeli i widzę z tego powodu straszne straty wydajności. Z tego powodu chciałbym załadować rekordy z datą w zakresie (1 miesiąc) do (1 rok od teraz) i wyświetlić je w tabeli. Obecnie mogę zrobić to z następujących powodów:
W moich articles.client.controller.js:
$scope.find = function() {
$articles = Articles.query();
};
... iw moich articles.server.controller.js:
var now = new Date();
var aYearFromNow = new Date(now.getTime() + 86400000*365); //add a year
var aMonthAgo = new Date(now.getTime() - 86400000*30); //subtract roughly a month
exports.list = function(req, res) { Article.find().where('date').lt(aYearFromNow).gt(aMonthAgo).sort('-created').populate('user', 'displayName').exec(function(err, articles) {
if (err) {
return res.send(400, {
message: getErrorMessage(err)
});
} else {
res.jsonp(articles);
}
});
};
Problem polega na tym, że nie jest to dynamiczny sposób robienia rzeczy. Innymi słowy, chcę, aby użytkownik mógł określić, jak daleko wstecz i jak daleko do przodu chcą zobaczyć.
Jak mogę powiązać ze zmiennymi (np. "AYearFromNow" i "aMonthAgo") w moim widoku klienta, który zmieni parametry zapytania w moim kontrolerze serwera?
To jest czystszy sposób radzenia sobie z tym, nie wymagając dodawania tras i bałaganu po stronie serwera. Korzystając z zapytania, można zachować ogólną charakterystykę listy, dodając warunkowo warianty mangusty. – HdN8