提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
在学习 unicloud 时,碰到的一个问题,记录一下~
提示:以下是本篇文章正文内容,下面案例可供参考
一、碰到了什么问题?
学习 uniCloud 视频教程 P10 代码生成工具 schema2code-入门体验 时,视频中点击创建是可以创建成功的,我以为照着步骤来就不会出问题,结果我还是太年轻了
二、寻找原因
也就是说 create_date 这个字段出现了问题了呗。于是我去看了下 create_date 这个字段长啥样:
formData = {
"username": "",
"gender": 0,
"mobile": "",
"email": "",
"comment": "",
"create_date": null
}
emmm好像没啥问题啊。
莫非是写入表的时候限制了?跑去 opendb-contacts.schema.json 这个文件里看了眼
{
"bsonType": "object",
"permission": {
"read": true,
"create": true,
"update": true,
"delete": true
},
"required": [ "username", "mobile" ],
"properties": {
"_id": {
"description": "存储文档 ID(用户 ID),系统自动生成"
},
......
"create_date": {
"bsonType": "timestamp",
"description": "创建时间",
"forceDefaultValue": {
"$env": "now"
}
}
}
}
forceDefaultValue ?强制默认值?
看看官方文档怎么说
开头暴击:
forceDefaultValue 也是指定新增时当前字段的默认值,与 defaultValue 不一样,forceDefaultValue 不可被客户端修改。
什么?不能被修改?
强制默认值,覆盖默认值 “forceDefaultValue”: …,指定默认值为当前时间戳。此时前端传任何值均无效,新增记录时一定会变成当前时间。
什么?传任何值都无效?
那我该怎么办?
三、解决
既然不能修改,传什么都无效,那干脆不传这个字段了。
/**
* 提交表单
*/
submitForm(value) {
// 不传 create_date 这个字段
delete value.create_date;
// 使用 clientDB 提交数据
return db.collection(dbCollectionName).add(value).then((res) => {
uni.showToast({
icon: 'none',
title: '新增成功'
})
this.getOpenerEventChannel().emit('refreshData')
setTimeout(() => uni.navigateBack(), 500)
}).catch((err) => {
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
})
})
}
结果:
好嘛,不传就行了呗
总结
如果不想用 foreDefaultValue ,那么用 defaultValue 也是可以解决的。
刚开始学,碰到问题,看官方文档应该能解决大部分的问题。
记录结束。