Я новичок в Sails/Node, но использую библиотеку Q для параллельного выполнения запросов. Например, у меня есть метод контроллера, который ищет результаты, но также предоставляет общее количество записей в объекте ответа:
search: function(req, res)
{
//parse parameters
var where = req.param('where') || {};
var limit = req.param('limit')|| 0;
var skip = req.param('skip') || 0;
//in case limit or skip are strings, convert to numbers
if (limit) { limit = +limit; }
if (skip) { skip = +skip; }
//prepare query promises for total records and a limited result set
var countPromise = User.count(where);
var findPromise = User.find({
limit: limit,
skip: skip,
sort: req.param('sort'),
where: where
});
console.log('Searching Users: limit: '+limit+', skip: '+skip+', where:',where);
//run asynchronous queries in parallel and
//return composite JSON object on success
Q.all([countPromise,findPromise])
.spread(function(numRecords, matchingRecords){
console.log(numRecords + " total users found, sending " + matchingRecords.length + " records starting from " + skip + ".");
//package response
var response = {};
response.total = numRecords;
response.users = matchingRecords || [];
//send response
return res.json(response);
}).fail(function(err){
//return server error
return res.serverError(err);
});
}
Хотя Waterline использует библиотеку Q внизу, мне пришлось потребовать библиотеку q в верхней части контроллера, чтобы использовать метод all
. Есть ли способ сделать библиотеку Q доступной для всех контроллеров/всего моего приложения? Или я должен просто включить оператор require в верхней части каждого контроллера, которому он нужен?