babbaggeii
babbaggeii

Reputation: 7747

beforeCreate not executing when trying to create entry - Sails JS

I've got a user model, and I'm just trying to test out beforeCreate by returning err, but when I do POST /user it creates the model fine, without executing the beforeCreate method. What am I doing wrong here? Here's models/User.js:

module.exports = {

    connection: "mysql",

  attributes: {

    firstname: {
        type: "string",
        required: true
    },

    lastname: {
        type: "string",
        required: true
    },

    fullname: function() {
        return this.firstname + ' ' + this.lastname;
    },

    username: {
        type: "string",
        required: true
    },

    password: {
        type: "string",
        required: true
    },

    email: {
        type: "email",
        required: true
    },

    status: {
        type: "integer",

        /*
        * 0 - unconfirmed, 1 - confirmed, 2- suspended
        */
        enum: [0, 1, 2]
    },

    // Override toJSON instance method to remove password value
    toJSON: function() {
      var obj = this.toObject();
      delete obj.password;
      return obj;
    },

    // Associations
    roles: {
        collection: "role",
        via: "users"
    },

    permissions: {
        collection: "permission",
        via: "users"
    },

    // Lifecycle Callbacks
      beforeCreate: function(values, next) {
          return next(err); 
    }
  }
};

Upvotes: 1

Views: 228

Answers (2)

taufique
taufique

Reputation: 2751

Your beforeCreate got inside attributes. It have to be on the outside. like -

module.exports = {

  connection: "mysql",

  attributes: {

    firstname: {
        type: "string",
        required: true
    },

    lastname: {
        type: "string",
        required: true
    },

    fullname: function() {
        return this.firstname + ' ' + this.lastname;
    },

    username: {
        type: "string",
        required: true
    },

    password: {
        type: "string",
        required: true
    },

    email: {
        type: "email",
        required: true
    },

    status: {
        type: "integer",

        /*
        * 0 - unconfirmed, 1 - confirmed, 2- suspended
        */
        enum: [0, 1, 2]
    },

    // Override toJSON instance method to remove password value
    toJSON: function() {
      var obj = this.toObject();
      delete obj.password;
      return obj;
    },

    // Associations
    roles: {
        collection: "role",
        via: "users"
    },

    permissions: {
        collection: "permission",
        via: "users"
    }
  },

  beforeCreate: function(values, next){
    return next(err);
  }
};

Upvotes: 2

babbaggeii
babbaggeii

Reputation: 7747

beforeCreate is not an attribute but a method on the model, so it should be like this:

attributes: {
    ....
},

beforeCreate: {
    ....
}

Upvotes: 3

Related Questions