在Sails.js中定义可重用函数的正确位置

时间:2015-07-28 06:32:29

标签: node.js sails.js

我有很多功能,比方说P(),Q(),R(),S(),T(),我有3个控制器,A,B和C.

控制器A使用P()和Q(),B使用R(),S()和T(),而C使用P(),Q()和T()。

我已经定义了控制器,我应该在哪里定义函数(哪个文件夹)?如何将它们包含在控制器中?

这些功能可能会在以后的某些其他控制器中使用(并且可以对它们进行分类)。

2 个答案:

答案 0 :(得分:6)

在Sails 1.0中,您应该使用Helpers而不是服务。

  

从v1.0开始,所有Sails应用均内置了对助手的支持,   简单的实用程序,使您可以在多个中共享Node.js代码   地点。这可以帮助您避免重复自己,并使开发   通过减少错误和最小化重写来提高效率。喜欢   actions2,这也使得创建文档更为容易   您的应用。

您可以运行以下命令来生成新的帮助程序:

  

风帆生成帮助程序的获取当前日期

将在helpers文件夹下创建一个新文件。示例:

module.exports = {
    friendlyName: 'Get current date',
    description: 'Creates a new Date object and returns it',
    inputs: {},
    exits: {
        success: {
            outputFriendlyName: 'Current date',
            outputType: 'ref'
        },
    },
    fn: async function (inputs, exits) {
        return exits.success(new Date());
    }
};

然后像sails.helpers.getCurrentDate()一样使用它。

答案 1 :(得分:5)

您应该将它们放在services文件夹中。以下是the docs规定的内容:

  

'服务'类似于控制器操作,但通常用于在用户发送请求的时间和服务器发回响应之间不必发生的事情。任何不依赖于.req()和.res()的逻辑都可以转换为服务,除非是为了保持控制器的清洁和可管理性。

例如,您可以创建Utils服务:

// api/services/Utils.js

module.exports.p = function (a, b, c) {
  // Do whatever...
};

module.exports.q = function (a, b, c) {
  // Do whatever...
  return c();
};

// And so on

在控制器中使用这些功能,如下所示:

// api/controllers/A.js

module.exports = {

  anAction: function (req, res) {
    // ...
    Utils.p('hello', 1, [123, 456]);
    Utils.q('world', 0, function () {
      // ...
    });
    // ...
  }

};

您还可以使用sails.services['utils'].theFunctionName()访问服务功能,并将theFunctionName替换为您要使用的功能名称(例如p)。