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

时间:2018-08-31 16:21:01

标签: javascript sails.js es6-class

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

我尝试将以下代码添加到hooks文件夹中的文件内:

console.log('Hook executed!');

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

当我提起应用程序时,我看到它正在被加载的钩子:

  

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

     

执行钩子!

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

const test = new Test();

当我执行控制器时:

  

ReferenceError:测试未定义

更新:根据the documentation,挂钩以不同的方式定义。因此,也许使用钩子不是最好的方法。关于如何使用钩子在具有或不具有的控制器上使类可用的任何想法?

3 个答案:

答案 0 :(得分:6)

您的文件应类似于下面显示的文件:

myClass.js

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

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

index.js

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

之后,当您运行index.js文件时,您将在控制台中看到“测试”。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

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

我认为您想使用类似的方法来使用钩子sails.hooks.Test

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