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