创建要在控制器上使用的 Class

Create a Class to be used on controllers

我想创建一个 Class 并在我的控制器上使用它。我不想在这种特殊情况下使用助手,因为我打算稍后使用此代码创建一个 npm 包。我现在不想创建包,因为我不希望我的代码是 public.

我试过将此代码添加到 hooks 文件夹中的一个文件中:

console.log('Hook executed!');

module.exports = class Test {
    constructor() {
        console.log('Object created!');
    }
}

当我提起应用程序时,我看到挂钩正在加载:

info: Starting app...

Hook executed!

然后在我添加的随机控制器中:

const test = new Test();

当我执行控制器时:

ReferenceError: Test is not defined

更新:根据 the documentation 钩子以不同的方式定义。所以也许使用钩子不是最好的方法。关于如何使用挂钩在控制器 上使用或不使用 Class 有什么想法吗?

文档说挂钩加载到 sails.hooks 对象中,要调用特定的挂钩,您可以使用 sails.hooks[<hook-name>]

我想你想用这样的东西来使用你的钩子sails.hooks.Test

更多信息https://sailsjs.com/documentation/concepts/extending-sails/hooks/using-hooks

您的文件应该如下所示:

myClass.js

'use strict';
class Test {
  constructor() {
    this.name = 'test';
  }
}
module.exports = Test;

您要使用此 class 的其他文件应如下所示:

index.js

const Test = require('./myClass');
let a = new Test();
console.log(a.name);

之后,当您 运行 index.js 文件时,您将在控制台中看到 'test'。

好吧,对 Sails hooks 进行了更多研究,我发现它们具有特殊的语法,所以这不是我想要的。另外,正如我已经说过的,我不想要控制器或助手。

因此,由于在 Sails 中没有默认方法来创建包而不实际创建它并将其包含到项目依赖项中,因此我采用了不同的方法。它不是很优雅,但它解决了这个特殊情况。我只是将我的 Test.js 文件放在 api 文件夹中,并将其包含在我的控制器中,如下所示:

const Test = require(__dirname + '/../../test');
let test = new Test();