javascript - Sails.js 如何调用 Controller 内的函数

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

开始接触 Sail.js(和 Node)。

版本

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

我的第一个 sails Controller (示例)如下:

// 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);
    }
};

我的目的是在该 Controller 本身中定义很少的函数,因为它们仅在此 Controller 下使用。我使用了 this.sum_it(i, j) this.minus_it(i, j) 并且它们都不起作用。

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

最佳答案

你必须这样思考:当 Sails 运行时,它会编译所有 Controller 、服务、助手等,并使用内部 Express 应用程序设置所有路由,因此,里面有“this”的概念 Controller 、服务、助手不起作用。

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

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

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

对于 Sails 1.x,您可以执行以下操作:

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

最后,如果您不需要将这些函数公开为操作,您可以将它们设置为 module.exports 之外的文件中的任何函数,然后在不使用 this 的情况下调用它们。

关于javascript - Sails.js 如何调用 Controller 内的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61039552/

相关文章:

javascript - 当 DOM 中的元素太多时,Angular ng 类性能问题

node.js - Rollup 无法看到 commonjs 模块的命名导出

mysql - 将表情符号保存到 MYSQL DB

javascript - 如何使用时刻格式格式化时间段?

javascript - 使用 Cucumber/Capybara 测试执行 JavaScript

javascript - 仅 CSS 切换开关在 ReactJs 中不起作用

javascript - 将对象数组转换为树形数据结构

javascript - 从 jQuery onChange 使用 Vue 更新数据值

javascript - 在 2 个相似的表上使用 javascript 表搜索

javascript - Visual Studio Code - MongoDB 的 TypeScript 定义