新手求问 如何规避从param中取到undefined导致插入或编辑数据库报错
发布于 6 年前 作者 zj9495 2261 次浏览 来自 问答

代码如下

let postData = ctx.request.body
let data = {
      vend_id: postData.vend_id,
      vend_name: postData.vend_name,
      remark: postData.remark
    }
squel.update()
      .table('vendors')
      .setFields(data)
      .where('vend_id = ?', postData.vend_id)
\n``` 

params为post提交过来的数据
remark是非必填字段 有的时候前端没有传过来remark字段就会导致remark取到undefined squel就会报  field value must be a string, number, boolean, null or one of the registered custom value types的错误
有什么好的办法规避这种情况吗
目前我是写个clearProp方法清除data中为undefined的属性 感觉每次insert或者update之前都要调用一次特别的麻烦
我看一位5年的JAVA前同事写的nodejs代码 是把不需要的一些属性比如token之类的删除之后直接把postData插入到数据库 这样操作合适吗 感觉不太安全啊
有什么好的办法规避吗?
第一次在cnode发帖 多多包涵
1 回复

可以试试我写这个库哦,如果你觉得直接存不安全,你先验证一下就行了 https://github.com/gateschema/gateschema-js

import _ from 'gateschema'
let postData = ctx.request.body
const schema = _.required.map({
      vend_id: _.required.number, 
      vend_name: _.required.string,
      remark: _.optional.string
})
// 验证并且移除多余的
schema.validate(postData, {removeAdditional: true}, (err) => {
  if (err) {
    //...
  } else {
 	// ...
  }
})
回到顶部