【问题标题】:Sails.js how to call functions within a controllerSails.js 如何在控制器中调用函数
【发布时间】:2020-04-05 07:47:40
【问题描述】:

在 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),两个都不行。

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

【问题讨论】:

  • 如果它们是特定于控制器的,则无需将它们公开。只需将它们移出module.exports 并在没有范围的情况下调用它们,例如sum_it(i, j).

标签: javascript node.js ecmascript-6 sails.js


【解决方案1】:

你必须这样想:当 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. 的情况下调用它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2016-08-06
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多