Waterline模型的布尔属性

时间:2014-12-23 17:28:17

标签: node.js sails.js waterline

我有一个MySQL数据库和一个Waterline模型用于一个相当简单的记录:Todo。它是直截了当的,因为我们将它用于Sails.js API的概念验证。

CREATE TABLE `Todo` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `TodoItem` varchar(200) NOT NULL,
  `Completed` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COMMENT='   ';

我以这种方式设置了模型:

module.exports = {
  connection: 'companyMySql',
  tableName: 'Todo',
  attributes: {
    ID: {
      type: 'integer',
      autoIncrement: true,
      primaryKey: true
    },
    TodoItem: {
      type: 'string',
      required: true
    },
    Completed: {
      type: 'boolean',
      defaultsTo: 'false',
      size: 1,
      boolean: true
    }
  },
  autoCreatedAt: false,
  autoUpdatedAt: false,
  autoPK: false
};

我遇到的问题是Todo的自动创建的API在“已完成”字段中创建了一堆额外的错误,我正在尝试找出如何删除它。我期待一个布尔值,但我绝对可以使用0/1或字符串文字,但这不是我得到的。我已尝试在该字段上进行各种验证,例如'min:0,max:1',但这并没有改变结果。

以下是检索单个记录的结果:

{
  "ID": 1,
  "TodoItem": "Create Todo API",
  "Completed": {
    "0": 1,
    "length": 1,
    "parent": [
      100,
      0,
      0,
      0,
      3,
      83,
      69,
      76,
      69,
      67,
      96,
      46,
      96,
      73,
      68,
      96,
      44,
      32,
      96,
      116,
      111,
      100,
      111,
      96,
      // This continues on for quite some time
    ],
    "offset": 2128 // This value increases each time I call a GET until it gets to ~8000, then it resets to ~500
  }
}

那么有没有人知道如何从中获得直接的布尔值呢?

1 个答案:

答案 0 :(得分:1)

经过一些进一步的测试后,我能够通过将TINYINT(1)用于我的列数据类型来获得一个布尔值,以便按预期工作。一旦我这样做,这个模型就像我预期的那样工作:

Completed: {
  type: 'boolean',
  defaultsTo: false,
  boolean: true
}

这似乎并不理想,但它是我的目的的解决方案。

相关问题