Javascript对象未使用Array.Map()更新

时间:2019-04-04 17:18:18

标签: javascript arrays json express mongoose

我有一个Express API,其中有以下Mongoose查询,该查询从数据库中提取帖子,然后我想将数据库中的时间戳(Date()对象)转换为相对时间字符串。

正如您所看到的,我正在尝试使用Array.Map将一个具有此字符串作为值的time属性添加到posts对象。

这似乎可行,因为在控制台中登录items[0].time会返回正确的值(请参见cose中的注释)。

但是!当使用res.json将对象发送回时,time属性不在其中。

我认为这可能是客户端缓存问题,但是当在res.json中添加另一个值时,新值将随帖子一起发送。

Post.find({}, 'author text timestamp')
        .sort({ _id: -1 })
        .populate({ path: 'author', select: 'username' })
        .exec(function(error, posts) {
          if (error) {
            console.error(error)
          }


          items = posts.map(function(item) {
            item.time = moment(item.timestamp).fromNow()
            return item
          })

          console.log('Relative date:' + items[0].time) // This logs: "Relative date:an hour ago"

          res.json({
            posts: items
          })
          /*
            Response:

            posts: {
              0: {
                author: {_id: "5c98f40f793edf61bcc94b4d", username: "Admin"},
                text: "Why",
                timestamp: "2019-04-04T15:46:36.142Z",
                _id: "5ca626dc45734a2612acbcd2"
              }
            }
          */
        })

这是服务器相关的缓存问题还是我不​​知道的Mongoose对象特有的问题?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我能够在代码中使用using module statement来解决这个问题。