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

问题描述 投票:1回答:1

在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),但它们都不起作用。

在控制器中具有多个功能并在该控制器文件中调用它们的最佳方法是什么(假设那些功能对于该控制器而言太过特定,因此无需将它们取出并放入其他帮助文件中?)?

javascript node.js ecmascript-6 sails.js
1个回答
0
投票

您的思考方式是这样的:当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)

最后,如果您不需要将这些功能公开为动作,则只需使它们在模块外部文件中的任何功能都可以。exports,并在不使用this.的情况下调用它们>

© www.soinside.com 2019 - 2024. All rights reserved.