Sails.js 如何在控制器中调用函数

Sails.js how to call functions within a controller

亲身体验 Sail.js(和节点)。

版本

$ sails --version
1.2.4
$ node --version
v12.16.1

我的第一个风帆控制器(示例)如下:

// MyController
// MyController.js

module.exports = {

    sum_it: function (a, b) {
        return (a + b);
    },

    minus_it: function (a, b) {
        return (a - b);
    },

    process_it: function (req, res) {
        let i = 12;
        let j = 4;
        do_what = "sum"; //this will be an input extracted from req
        if (do_what == "sum") {
            let result = this.sum_it(i, j); //"this" doesn't work????
        } else {
            let result = this.minus_it(i, j); //"this" doesn't work????
        }
        console.log(result);
        return res.send(result);
    }
};

我的意图是在该控制器本身内定义几个函数,因为它们只能在该控制器下使用。我用了 this.sum_it(i, j) this.minus_it(i, j) 两个都不行。

在控制器中拥有多个函数并在该控制器文件中调用它们的最佳方法是什么(假设这些函数对于该控制器来说过于具体,因此无需将它们取出并放入其他帮助文件中)?

你必须这样想:当 Sails 运行时,它会编译你所有的控制器、服务、助手等,并使用内部 Express 应用程序设置所有路由,因此,"this" 内部控制器、服务、助手不起作用。

为此,sails 为您提供了一个全局可用的对象:sails。在该对象中,您可以找到所有运行时变量、控制器、服务等。

要访问控制器内的特定控制器操作,对于 Sails 0.12,您可以执行以下操作:

sails.controllers.my.sum_it(1,2)

对于 Sails 1.x,您可以:

sails.getActions()['my/sum_it'](1,2)

最后,如果您不需要将这些函数公开为操作,您可以让它们在 module.exports 之外的文件中的任何位置运行,并在没有 this.[=14 的情况下调用它们=]