首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未验证的DataTypes后缀

未验证的DataTypes后缀
EN

Stack Overflow用户
提问于 2016-03-17 19:15:35
回答 1查看 1.4K关注 0票数 1

从最近开始,我一直在学习Node.JS,目前我正在使用Sequelize。我对update方法有问题;它更新得很好,但是当我输入与属性的数据类型不兼容的值时,它仍然会传递它,并在数据库中更新它。

例如:在Postman中,当我尝试用字符串更新记录的“已完成”属性时,即使数据类型被指定为布尔值,它也会被更新,并且不会传递错误消息(请求状态为200)。以下是代码:

  • todo模型: module.exports =函数(sequelInst,DataTypes){返回sequelInst.define('todo',{ description:{ type: DataTypes.STRING,allowNull: false,验证:{ len: 1,250 },completed:{ type: DataTypes.BOOLEAN,allowNull: false,defaultValue: false });};
  • server.js: ..。app.put('/todos/:id',函数(req,res){ var body =_.pick(req.body,'description','completed');var属性= {};var paramId = parseInt(req.params.id,10);if( body.hasOwnProperty('completed')){ attributes.completed = body.completed;} if( body.hasOwnProperty('description')) { attributes.description = body.description;} db.todo.findById(paramId) .then(函数( todo ){ //第一个承诺链)如果(Todo){返回todo.update(属性);}res.status(404).send(“不对应于id");},函数() {res.status(500).send(”服务器错误“);).then(函数(Todo){/第二承诺链res.send(todo);},函数(e){ res.status(400).json(e);};});
EN

回答 1

Stack Overflow用户

发布于 2016-03-19 16:25:33

Instance.update不根据类型进行验证。

由于您没有收到错误,您可能使用的是SQLite或其他在数据库级别上对类型没有严格验证的存储。

您需要添加您自己的验证器。如果你这样做:

代码语言:javascript
复制
completed: {
  type: DataTypes.BOOLEAN,
  allowNull: false,
  defaultValue: false,
  validate: {
    isBoolean: true
  }
}

您将得到以下错误:

代码语言:javascript
复制
Unhandled rejection SequelizeValidationError: Validation error: Validation isBoolean failed

但是,这种验证似乎是不可取的:

代码语言:javascript
复制
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

这将起作用:

代码语言:javascript
复制
var _ = require('lodash');

validate: {
  isBoolean: function (val) {
    if (!_.isBoolean(val)) {
      throw new Error('Not boolean.');
    }
  }
}

会给你一个错误:

代码语言:javascript
复制
Unhandled rejection SequelizeValidationError: Validation error: Not boolean.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36069722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档