unicloud 新增记录时提示:create_date不与默认值匹配

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

在学习 unicloud 时,碰到的一个问题,记录一下~


提示:以下是本篇文章正文内容,下面案例可供参考

一、碰到了什么问题?

学习 uniCloud 视频教程 P10 代码生成工具 schema2code-入门体验 时,视频中点击创建是可以创建成功的,我以为照着步骤来就不会出问题,结果我还是太年轻了
弹框提示 create_date不与默认值匹配

二、寻找原因

也就是说 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 也是可以解决的。
刚开始学,碰到问题,看官方文档应该能解决大部分的问题。
记录结束。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值