1

我在 MirageJs 中有两个模型:

  • 博客
  • 标签

每个博客可以有更多标签,反之亦然。我与一个名为 的连接表建立了多对多关系blog_tag。我的问题是,当我从服务器获得响应时,标签只包含 id 属性。如何将整个标签对象嵌入到响应中?

Response:
{
  "blogs": [
    {
      "title": "Some title",
      "author": "Author 0",
      "id": "1",
      "tags": [
        {
          "id": "1"
          // Other properties are not included here :(
        }
      ]
    }
  ]
}

I like to see something like this:
{
  "blogs": [
    {
      "title": "Some title",
      "author": "Author 0",
      "id": "1",
      "tags": [
        {
          "id": "1",
          "name": "Tag 0"
        }
      ]
    }
  ]
}

我的服务器配置: Mirage REPL

import { belongsTo, createServer, Factory, hasMany, Model, RestSerializer } from "miragejs"

export default createServer({
  serializers: {
    blog: RestSerializer.extend({
      include: ['tags'],
      embed: true
    })
  },

  models: {
    blog: Model.extend({
      tags: hasMany('blog_tag')
    }),

    tag: Model.extend({
      blogs: hasMany('blog_tag')
    }),

    blog_tag: Model.extend({
      blog: belongsTo(),
      tag: belongsTo()
    })
  },

  factories: {
    blog: Factory.extend({
      author(i) {
        return 'Author ' + i
      },
      title() {
        return 'Some title'
      }
    }),
    tag: Factory.extend({
      name(i) {
        return 'Tag ' + i
      }
    })
  },

  seeds(server) {
    server.createList('blog', 2)
    server.createList('tag', 10)

    server.create('blog_tag', { blogId: 1, tagId: 1 })
  },

  routes() {
    this.namespace = "api"

    this.get("/blogs", (schema) => {
      return schema.blogs.all()
    })
  },
})
4

1 回答 1

1

您实际上并不需要blog_tag模型能够进行多对多操作,Mirage.js 将仅使用blogtag模型进行管理。

在这里查看一个工作示例:Mirage REPL

于 2021-01-15T13:43:48.530 回答