2016-08-15 6 views
2

pg-promiseを使用してNode.JSとPostgreSQLを使用して非常に単純なRESTプラットフォームを構築しています。私の目標は、ユーザーとチケットを使って信じられないほど単純な発券システムを作ることです。この時点では、すべてのチケットのリストをサーバーに照会できるようにしたいだけです。pg-promiseを使用してJSON出力を書式設定し、外部キーをオブジェクトとしてカプセル化する

私のデータベースには、次の形式での2つのテーブルで構成されています

CREATE TABLE people (
    ID SERIAL PRIMARY KEY, 
    NAME VARCHAR(128) 
); 

CREATE TABLE tickets (
    ID SERIAL PRIMARY KEY, 
    SUBMITTED_BY int4 REFERENCES people(ID), 
    TITLE VARCHAR(128) 

あなたは人にチケットを指し、単一の外部キーがある見ることができるように。

coop=> SELECT * FROM people; 
id | name 
----+---------- 
    1 | John Doe 
(1 row) 

coop=> SELECT * FROM tickets; 
id | submitted_by |  title  
----+--------------+------------------ 
    1 |   1 | My first ticket! 
(1 row) 

をそして私はJSONレスポンスをレンダリングするために、次のクエリ機能でPG-約束を使用します:私は、次のデータを自分のデータベースに取り込まれている

// GET ALL query function 
function getAllTickets(req, res, next) { 
    db.any('select * from tickets left join people on tickets.submitted_by = people.id;') 
    .then(function (data) { 
     res.status(200) 
     .json({ 
      status: 'success', 
      data: data, 
      message: 'Retrieved ALL tickets' 
     }); 
    }) 
    .catch(function (err) { 
     return next(err); 
    }); 
} 

機能が動作しますが、私はJSON出力を取り出すことができます

:: GET /api/tickets 
    {"status":"success","data":[{"id":1,"submitted_by":1,"title":"My first ticket!","name":"John Doe"}],"message":"Retrieved ALL tickets"} 

しかし、これは私が望む形式ではありません。私は簡単にAngular2サービスからこのAPIを消費することができるので、これこれをしたい理由は

{"status":"success","data":[{"id":1,submitted_by: {"id": 1, "name":"John Doe"},"title":"My first ticket!"}],"message":"Retrieved ALL tickets"} 

と:私は次のように外部キーを交換し、「チケット」オブジェクト内「人のオブジェクトをカプセル化したいですチケットと人物を私のコンポーネント内のオブジェクトに変換します。しかし、私はこれをやり遂げる方法については全く考えていませんし、pg-promiseのドキュメントは役に立ちませんでした。

私は過去1年間DjangoでWebプログラミングしていましたが、Node.JSに切り替えたので、私は完全な初心者のように感じます。誰かが私に手を差し伸べるか、正しい方向に私を向けることができますか?

答えて

1

pg-promiseは、クエリを直接実行し、サーバーから送信されたとおりに正確にデータを提供します。それはORMではないので、それ以上の変換は行いません。

説明したようにデータを変換したい場合は、自分でやってください。それは簡単なことです。

pg-promiseという唯一の方法は、クエリレベルに分離があった場合、つまり単一の結合クエリの代わりに親クエリ+子クエリがあった場合、記述した方法でデータを変換できます。この種の例については、Get a parents + children tree with pg-promiseを参照してください。

ただし、私はここでアドバイスすることはありません。なぜなら、単一の結合クエリがはるかに効率的であるからです。データを受け取ったら、最後にデータを変換するだけです。

もちろん、直接クエリを実行するのとはまったく違うアプローチになるように、あなたがその方法をとることに決めた場合、あなたのためにできるORM-sがあります。

+0

vitaly-t、文字列の書式設定を使用して結果を変換する方法の簡単な例を私に与えることはできません。それは信じられないほど役に立つだろう。 – Fox

+0

@Fox最良の例はここにあります:https://stackoverflow.com/questions/39805736/get-join-table-as-array-of-results-with-postgresql-nodejs –

関連する問題