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

rGu*_*Gun 4 node.js sails.js

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

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

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

这些功能可能稍后在其他一些控制器中使用(并且可以对它们进行分类).

fsi*_*i90 6

在Sails 1.0中,您应该使用Helpers而不是Services.

从v1.0开始,所有Sails应用程序都内置了对帮助程序的支持,这些简单实用程序允许您在多个位置共享Node.js代码.这有助于您避免重复自己,并通过减少错误和最小化重写来提高开发效率.与actions2一样,这也使得为应用程序创建文档变得更加容易.

您可以生成运行该命令的新助手:

sails生成帮助器get-current-date

将在该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());
    }
};
Run Code Online (Sandbox Code Playgroud)

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


Yan*_*and 5

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

"服务"类似于控制器操作,但通常用于在用户发送请求和服务器发回响应之间不必发生的事情.任何不依赖于.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
Run Code Online (Sandbox Code Playgroud)

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

// api/controllers/A.js

module.exports = {

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

};
Run Code Online (Sandbox Code Playgroud)

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