如何模拟使用牙痛hapi插件创建的两个模型之间的关系?

时间:2014-11-26 22:19:43

标签: node.js hapijs joi

我正在使用Hapi框架构建节点服务器,我尝试使用toothache插件为MongoDB创建CRUD端点,但我可以&#39 ;为我的生活弄清楚如何在两个物体之间建立关系。

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

我有两个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()
        }),
    }
}

我们在两种模式上应用牙痛,并获得两种模型:

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"
}

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

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

似乎牙痛插件很难对关系数据进行建模,这很遗憾,因为在现实世界中,你不能只拥有嵌入式数组,并且将被迫使用标准化数据。我真的很感激一些帮助。提前谢谢!

0 个答案:

没有答案