1

我正在使用Hapi框架构建节点服务器,并且正在尝试使用toothache插件为 MongoDB 创建 CRUD 端点,但我终生无法弄清楚如何在两个对象之间创建关系.

我将应用程序简化为一个非常简单的场景:

我有两种 CRUD 模式,一种用于作者,一种用于书籍。一本书包含其作者的 ID,但不包含名称。问题是:如何编写返回包含作者姓名的书的路线?

var bookCRUD = {
    collection: 'books',
    create: {
        payload: Joi.object().keys({
            authorId: Joi.string().required(),
            title: Joi.string().required()
        }),
    },
    update: {
        payload: Joi.object().keys({
            authorId: Joi.string(),
            title: Joi.string()
        }),
    }
}

var authorCRUD = {
    collection: 'authors',
    create: {
        payload: Joi.object().keys({
            name: Joi.string().required()
        }),
    },
    update: {
        payload: Joi.object().keys({
            name: Joi.string().required()
        }),
    }
}

我们在两种模式上都应用了toothache,得到了两个模型:

var Book = require('toothache')(bookCRUD);
var Author = require('toothache')(authorCRUD);

检索某本书的路线如下所示:

plugin.route({
    path: '/books/{id}',
    method: 'GET',
    config: {
        handler: Book.get
    }
});

并会返回:

{
    "_id": "54762fd0654c479400daa9d4",
    "authorId": "547607c7c80064281e7a7b50",
    "title": "Some Book Title"
}

我如何在同一个处理程序中询问 Author 模型,以获得如下答案:

{
    "_id": "54762fd0654c479400daa9d4",
    "authorId": "547607c7c80064281e7a7b50",
    "authorName": "Some Great Writer",
    "title": "Some Book Title"
}

似乎toothache 插件很难对关系数据进行建模,这是一种耻辱,因为在现实世界中,您将无法仅使用嵌入式数组,并且将被迫使用规范化数据。我真的很感激一些帮助。先感谢您!

4

0 回答 0