Javascript Sails ORM不懂数值吗?

Javascript Sails ORM不懂数值吗?,javascript,sails.js,waterline,value-type,Javascript,Sails.js,Waterline,Value Type,这应该行得通,每件事一步一步都行。除了实际写入数据库。在我的sails应用程序中,我有一个到以下功能的路径: add: function (req, res) { let params = req.allParams(); let idx = params.event_id; let name = params.name; let sport = params.sport; let location = params.location; let i

这应该行得通,每件事一步一步都行。除了实际写入数据库。在我的sails应用程序中,我有一个到以下功能的路径:

add: function (req, res) {
    let params = req.allParams();
    let idx = params.event_id;
    let name = params.name;
    let sport = params.sport;
    let location = params.location;
    let idNr = Number(idx);
    let sportNr = Number(sport);
    let locationNr = Number(location);
    let dat = {
      name:name,
      id:idNr,
      sport:sportNr,
      location:locationNr
    };
    console.log(dat);

    Event.create(dat)
      .then(function (res){ return res.ok(); })
      .catch(function (err){
        console.log(err);
        return res.send(err);
      });
}
真的是一个简单的函数,对吗?但根据我的好数据,它失败了:

{
    "error": "E_VALIDATION",
    "status": 400,
    "summary": "2 attributes are invalid",
    "model": "Event",
    "invalidAttributes": {
        "location": [
            {
                "rule": "number",
                "message": "Value should be a number (instead of \"3\", which is a string)"
            }
        ],
        "sport": [
            {
                "rule": "number",
                "message": "Value should be a number (instead of \"2\", which is a string)"
            }
        ]
    }
}
这怎么会发生?我清楚地使用dat,它需要运动和位置的数字变化。-日志甚至显示dat按预期填充了数值

因此,这完全没有意义;不应该

编辑时,模型定义为:

module.exports = {
  attributes: {
    id: {
      type: 'number',
      required: true,
      unique: true,
    },
    name: {
      type: 'string',
      required: true
    },
    location: {
      type: 'number',
      required: true,
    },
    sport: {
      type: 'number',
      required: true
    },
  },
};

这个问题似乎是对sails支持的一个限制

type:'number'
来自官方的关于模型属性的信息。支持以下属性类型:

一串 文本 整数 浮动 日期 日期时间 布尔值 二进制的 大堆 json 媒体文本 长文 目标 作为使用javascript的替代方案

Number()

函数,可以考虑使用

parseInt()
对于已知整数值或

parsefloat()

用于已知浮点数。

它告诉您值是字符串而不是数字。在添加函数中尝试console.logtypeof param.location。字符串3与数字3不同。原始HTTP参数总是字符串。@是的,这就是为什么我使用let sportNr=Numbersport重新生成参数;和dat测试控制台.logtypeof dat.location显示数字A,是;对不起,我完全错过了。