从最近开始,我一直在学习Node.JS,目前我正在使用Sequelize。我对update方法有问题;它更新得很好,但是当我输入与属性的数据类型不兼容的值时,它仍然会传递它,并在数据库中更新它。
例如:在Postman中,当我尝试用字符串更新记录的“已完成”属性时,即使数据类型被指定为布尔值,它也会被更新,并且不会传递错误消息(请求状态为200)。以下是代码:
发布于 2016-03-19 16:25:33
Instance.update不根据类型进行验证。
由于您没有收到错误,您可能使用的是SQLite或其他在数据库级别上对类型没有严格验证的存储。
您需要添加您自己的验证器。如果你这样做:
completed: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
validate: {
isBoolean: true
}
}您将得到以下错误:
Unhandled rejection SequelizeValidationError: Validation error: Validation isBoolean failed但是,这种验证似乎是不可取的:
validator *deprecated* you tried to validate a boolean but this library (validator.js) validates strings only. Please update your code as this will be an error soon. node_modules/sequelize/lib/instance-validator.js:276:33这将起作用:
var _ = require('lodash');
validate: {
isBoolean: function (val) {
if (!_.isBoolean(val)) {
throw new Error('Not boolean.');
}
}
}会给你一个错误:
Unhandled rejection SequelizeValidationError: Validation error: Not boolean.https://stackoverflow.com/questions/36069722
复制相似问题