1

Hapiフレームワークを使用してノード サーバーを構築しており、 toothacheプラグインを使用して MongoDB の CRUD エンドポイントを作成しようとしていますが、2 つのオブジェクト間の関係を作成する方法が一生わかりません。 .

アプリを非常に単純なシナリオに減らしました。

著者用と書籍用の 2 つの 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()
        }),
    }
}

両方のスキーマに歯痛を適用し、2 つのモデルを取得します。

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

歯痛プラグインはリレーショナル データのモデル化を非常に困難にしているように見えますが、これは残念なことです。現実の世界では、埋め込み配列しか持つことができず、正規化されたデータを使用せざるを得ないからです。私は本当にそれでいくつかの助けをいただければ幸いです. 前もって感謝します!

4

0 に答える 0