Create a Class to be used on controllers

Viewed 579

I want to create a Class and make it available on my controllers. I don't want to use helpers in this particular case because I'm planning to create an npm package later with this code. I don't want to create a package now, because I don't want my code to be public.

I've tried adding this code inside a file in the hooks folder:

console.log('Hook executed!');

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

When I lift the app I see that the hook it's being loaded:

info: Starting app...

Hook executed!

Then in a random controller I'm adding:

const test = new Test();

And when I execute the controller:

ReferenceError: Test is not defined

Update: According to the documentation hooks are defined in a different way. So maybe using hooks is not the best approach. Any ideas on how to make a Class available on the controllers with or without using hooks?

3 Answers

Your files should be like these files shown bellow:

myClass.js

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

The other file which you want to use this class should look like this:

index.js

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

After that when you run index.js file, you will see 'test' in your console.

Well, researching a bit more about Sails hooks I found that they have a special syntax so that's not what I wanted. Also, as I've already said, I didn't want a controller or a helper.

So, since there's no default way in Sails to create a package without actually creating it and including it to the project dependencies, I took a different approach. It's not very elegant, but it solves this particular case. I've simply placed my Test.js file inside the api folder, and included it in my controller like this:

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