收藏
回答

无法在云函数端,通过doc.update或者doc.set更新date的值

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 Bug 工具 wxf73ae469f55f12f9 2.3.0

- 当前 Bug 的表现(可附上截图)


云函数端,通过doc.update以及doc.set更新日期都失败,提示

Error: errCode: -401003 api parameter type error | errMsg: data.data.created_at is not JSON-serializable


- 预期表现


- 复现路径


- 提供一个最简复现 Demo

exports.main = async (event, context) => {
  ///*
  let collectionName = event.collectionName;
  let templateData = event.data;//*/
 
  let id = templateData._id;
  delete templateData._id;
  return cloud.database().collection(collectionName).doc(id).update({
    data: templateData
  });
}


回答关注问题邀请回答
收藏

3 个回答

  • 邓坤力
    邓坤力
    2018-10-08

    你好,这是因为调用 wx.cloud.callFunction 时传入的 data 对象中的字段暂无法序列化 Date 对象,因此报错,后续我们会考虑提供序列化,请调用时使用 +new Date() 而不是 new Date(),即使用数字表示时间而不是 Date 对象

    2018-10-08
    有用 2
    回复 1
    • 2019-03-27

      您好,我今天遇到了这个问题

      小程序端可以在数据库中保存Date对象,但云函数端不能

      请问官方打算何时修复这个问题?

      如果官方近期没有修复计划,我就把数据库中全部Date对象转为string了

      谢谢

      2019-03-27
      回复
  • 天空
    天空
    2019-11-09

    我也遇到这个问题,请解决了吗

    2019-11-09
    有用
    回复
  • 张吉(jimmyjzhang)
    张吉(jimmyjzhang)
    2018-10-06

    看报错信息是代码的问题,templateData的值是不是不在预期内

    2018-10-06
    有用
    回复 2
    • 2018-10-06

      提示出错的字段是created_at,其赋值为new Date()。


      1. created_at:Sat Oct 06 2018 22:04:57 GMT+0800 (中国标准时间)

        1. __proto__:Object


      然后update失败。


      2018-10-06
      回复
    • 2018-10-07

      再次尝试了一下,小程序端调用doc.update能更新date字段,服务器端调用不可更新。

      服务器端代码:

      wx.cloud.callFunction({
            name: 'updateOneRecord',
            data: {
              collectionName: "goods",
              data: {
                created_at: new Date()
              }
            },
            complete: res => {
              console.log('updateOneProduct: ', res);
            }
          });
       
      /*****************************************/
       
      exports.main = async (event, context) => {
        let collectionName = event.collectionName;
        let templateData = event.data;
       
        let id = templateData._id;
        delete templateData._id;
        return cloud.database().collection(collectionName).doc(id).update({
          data: templateData
        });
      }


      请协助解决,感激不尽!

      2018-10-07
      回复
登录 后发表内容