gpt4 book ai didi

javascript - 如何使库(例如 Q)对所有 Controller 可用?

转载 作者:行者123 更新时间:2023-11-29 22:03:30 25 4
gpt4 key购买 nike

我对 Sails/Node 有点陌生,但我正在使用 Q 库并行运行查询。例如,我有一个搜索结果的 Controller 方法,但也提供响应对象中的记录总数:

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 库,但我必须在 Controller 顶部要求 q 库才能使用 all 方法。有没有办法让所有 Controller /我的整个应用程序都可以使用 Q 库?或者我应该只在需要它的每个 Controller 的顶部包含 require 语句?

最佳答案

您可以使用globals 来做到这一点。在您的初始代码中或从您的初始代码中的某处初始化它(可能是 app.js 的顶部 - 或者当您“提升”时运行的任何 Sails,我认为他们称之为)。

globals.Q = require('q);

参见 node doc on globals .

当然,您要么以(例如)的身份访问它

var deferred = globals.Q.defer();

这让我觉得很笨拙。或者,

var Q = globals.Q;
var deferred = Q.defer();

require 方法相比,这并没有真正为您节省几次击键,因为您仍然需要通过简单的变量名称明确地使其可用。

但这些是您的选择。您还可以创建某种通用模块来加载所有全局变量,例如考虑一个 common.js

module.exports = { Q: require('q'),
util: require('util') };

然后在另一个文件中,您可以一次包含它们。

var c = require('../path/to/common');
var deferred = c.Q.defer();

关于javascript - 如何使库(例如 Q)对所有 Controller 可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22263413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com