insertsails.jsruntime-errorsails-mongo

Sailjs with sails-mongo is enforcing type incorrectly. What am I doing wrong?


I have a sails app working with just a simple index and simple create (insert) to a mongo db. When I enter correctly typed data hard coded to be the type stated in the model, I get an error.

url insert err = [Error (E_VALIDATION) 1 attribute is invalid] Invalid attributes sent to urls:
 • status
   • Value should be a number (instead of "0", which is a string)

This is a very small, new project so not a lot of settings have been changed from default.

Since I have console.log in the create, I can see exactly what I' sending to the urls.create:

{ url: 'http://www.dina.com',
  status: 0,
  statusDate: '2016-11-19T19:46:10.804Z' }

I'm not doing anything to enforce type and it looks like I'm obeying type. Why am I getting error?

The model looks like:

// urls.js
module.exports = {
  attributes: {
    url : { type: 'string' },
    status: { type: 'number'},
    statusDate: {type: 'date'}
  }
};

My config/models.js has schema set to false:

// config/models.js
module.exports.models = {
  connection: 'DigitalOceanMongodbServer',
  migrate: 'safe',
  schema: false
};

My controller creates a new object with hard-coded status and statusDate of the correct type:

  // urlsController.js
  create: function (req, res) {

    let url = req.body.url; 
    if(!url) return res.json({failure: 'empty url'});

    let isValid = sails.validurl.isUri(url);
    if(!isValid) return res.json({failure: 'url is not valid'});   

    let newObj = {
      url: url,
      status: 0,    <---- obviously a number
      statusDate: new Date().toISOString() <---obviously a date
    }

    console.log(newObj);

    urls.create(newObj).exec(function createCB(err,created){ 
      if (err){
        return res.negotiate(err);
      } else {
        return res.ok(created); 
      }
    }); 
  }

Solution

  • Specify "integer" instead of "number" in the type of your model. I did not find "number" in the docs.

    See: http://sailsjs.org/documentation/concepts/models-and-orm/attributes