如何在发送响应之前在mongoose中向子文档数组添加属性,Hateoas

问题描述 投票:0回答:1

当我发送回复时,我有问题将Hateoas链接添加到我的Api。当我到达特定的所有者狗列表并尝试获取特定的狗(子文档)时,我可以显示狗,但是在发送响应时无法添加要显示的属性(我不想在数据库中添加hateoas链接。

使用Node,Express,Mongoose

//架构

let mongoose = require('mongoose')
let Schema = mongoose.Schema

// Dog Schema
let dogSchema = new Schema({
  name: { type: String, required: true },
  ownerID: { type: String, required: true },
  breed: { type: String, required: true },
  gender: { type: String, required: true },
  weight: { type: Number, required: false },
  length: { type: Number, required: false },
  img_src: { type: String, required: true }
})

// Owner Schema
let ownerSchema = new Schema({
  name: { type: String, required: true },
  password: { type: String, required: true },
  dogs: [dogSchema]
})

// Owner object
let Owner = mongoose.model('Owner', ownerSchema)

module.exports = Owner

//路由器

// GET /owners/:ownerId/Dogs/:dogID (view a specific dog)
    router.get('/owners/:ownerID/dogs/:dogID', (req, res, next) => {
      Owner.findById(req.params.ownerID, (err, owner) => {
        if (err) next(err)

        let dog = owner.dogs.id(req.params.dogID) // the specific dog

        // Add links attribute
        dog.links = [
          { rel: 'self', method: 'GET', href: '/owners/' + owner.id + '/dogs/' + dog.id },
          { rel: 'create', method: 'POST', href: '/owners/' + owner.id + '/dogs/' },
          { rel: 'edit', method: 'PUT', href: '/owners/' + owner.id + '/dogs/' + dog.id },
          { rel: 'delete', method: 'DELETE', href: '/owners/' + owner.id + '/dogs/' + dog.id }
        ]
        res.json(dog)
      })
    }

我不能在我的查询(Owner.findById)上使用.lean(),因为这会删除我使用的内置.id()方法:owner.dogs.id(req.params.dogID)

那么,我如何将我的Hateoas链接添加到res.json?

node.js json express mongoose hateoas
1个回答
0
投票

在您的代码之前 - dog.links = [*]

添加以下代码 -

dog = JSON.parse(JSON.stringify(dog))

然后为dog参数指定新属性。

© www.soinside.com 2019 - 2024. All rights reserved.