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

fsi*_*i90 6 javascript sails.js es6-class

我想Class在我的控制器上创建一个并使其可用.我不想在这种特殊情况下使用帮助器,因为我打算稍后使用此代码创建一个npm包.我现在不想创建一个包,因为我不想让我的代码公开.

我已经尝试在hooks文件夹中的文件中添加此代码:

console.log('Hook executed!');

module.exports = class Test {
    constructor() {
        console.log('Object created!');
    }
}
Run Code Online (Sandbox Code Playgroud)

当我解除应用程序时,我看到它正在加载的钩子:

信息:启动应用程序...

钩子被执行了!

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

const test = new Test();
Run Code Online (Sandbox Code Playgroud)

当我执行控制器时:

ReferenceError:未定义测试

更新:根据文档钩子以不同的方式定义.所以也许使用钩子不是最好的方法.关于如何在使用或不使用钩子的情况下在控制器使用Class的任何想法?

Sey*_*ani 6

您的文件应该像下面显示的这些文件:

myClass.js

'use strict';
class Test {
  constructor() {
    this.name = 'test';
  }
}
module.exports = Test;
Run Code Online (Sandbox Code Playgroud)

您要使用此类的另一个文件应如下所示:

index.js

const Test = require('./myClass');
let a = new Test();
console.log(a.name);
Run Code Online (Sandbox Code Playgroud)

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


fsi*_*i90 2

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

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

const Test = require(__dirname + '/../../test');
let test = new Test();
Run Code Online (Sandbox Code Playgroud)