iConnor
iConnor

Reputation: 20209

Where to access and store EJS Helpers - SailsJS

Well,

SailJS's default templateing engine is EJS (Embedded Javascript)

But I cannot seem to find the place where we can create our own helpers and stuff.

So, do you know where to access & store EJS helpers/stuff?

Upvotes: 5

Views: 3180

Answers (3)

Marcelo Boeira
Marcelo Boeira

Reputation: 880

solved: https://github.com/balderdashy/sails/issues/2162#issuecomment-55866731

config/http.js

module.exports.http = {
  // ...
  locals: {
    filters: {
      formatDate: function(date) { }
    }
  }
}

config/bootstrap.js

_.extend(sails.hooks.http.app.locals, sails.config.http.locals);

At some view...

views/test.ejs

<%=: created | formatDate %>

Upvotes: 6

anhnt
anhnt

Reputation: 779

You should create file in ./config with name anyname.js and write some EJS helper like these code:

var moment = require('moment');
var ejs = require('ejs');

ejs.filters.fromNow = function(date){
  return moment(date).fromNow()
}
ejs.filters.formatDate = function(date){
  return moment(date).format('MMM Do YYYY');
}
ejs.open = '<?';
ejs.close = '?>';

Then in layout, view, it should be call

<td><?=: post.createdAt | formatDate ?></td>

Hope that help!

Update

For some reasons, you guys have to install module sails locally to make sense. So just paste to your console:

npm i sails

regards,

Anh Nguyen

Upvotes: 3

JohnGalt
JohnGalt

Reputation: 2881

One way to accomplish this is through middleware. Something like:

module.exports.routes = {

  '*': function mixinForm(req, res, next) {
     // <%= form() %>
     res.locals.form = function () {
        return '<form action=""></form>';
     };
     next();
  },
}

I would also suggest making a feature request for a more integrated approach at: https://trello.com/b/cGzNVE0b/sails-js-feature-requests.

Upvotes: 2

Related Questions