自分自身をタイプ


寅寅


こんにちは皆さん、私はあなたと私のすべての経験を共有したいTypeORM . 私の最近のプロジェクトでは、私はブルーエプロンに類似した食糧配達サービスのための完全なスタックアプリケーションを構築するためにtypeRMを使用しました.プロジェクトのコードをチェックアウトできますhere そして、あなたは最後の製品を見ることができますhere . このポストでは、トップレベルの概要から、TypeOrmの上に行きます.そこでは、アプリケーションアーキテクチャに適合します.また、SQLデータベースを使用してデータベースを使用してデータベースを簡単に動作させることができます

どのようなタイプですか?


ウェブサイトを見てみましょう.

... an ORM that can run in NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms and can be used with TypeScript and JavaScript.


それが確かに記述的である間、あなたがORMが何であるかについて、わからないならば、それはあなたをとてもよくしません.
ウィキペディアのORMページから

Object-relational mapping (ORM, O/RM, and O/R mapping tool!) in computer science is a programming technique for converting data between incompatible type systems using object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language.


それが100 %であるので、私がその記述を含めたかった間、あなたがすでにデータベース界でLingoに慣れていないならば、それはかなり100 %のGibberishです.
私の頭の中のORMをどう思うかは以下の通りです
ORMは、私が私のSQLデータテーブルをJavaScriptオブジェクトに変換することができます.100 %正しくない間、私のユースケースのために、これはかなりの点でした.

私は私のアプリでそれを置くか。


GraphSQLがクライアントとサーバーの間にどのように座っているかのように、サーバーとデータベース間のインターフェイスです.
例として巣アプリケーションを使用するグラフィックがあります.

これは、データベースに送信することを決定するすべてのリクエストに触れるようになると、データの構造に関係しているので、非常に多くの魔法を行うことができます.しかし、すべてのこのジューシーな魔法はあなたがそれを動作させることができない場合はあまり良いことをしない.

竜甲形


TypeOrmをどんなスタックにインストールした後に、あなたが使用しているかは、すべてのグッズを得る前に少しの設定をする必要があります.私はあなたが既に使用している環境でDBセットアップを持っていると仮定します.Postgresを使用しているので、この例で使用するものですが、typeSQLはほとんどすべてのSQLデータベースをサポートしています.
あなたのルートディレクトリでormconfig.json ファイルをデータベースに接続する必要があります.あなたormconfig.json 次のようにします.
{
   "type": "postgres",
   "host": "localhost",
   "port": 3306,
   "username": "test",
   "password": "test",
   "database": "test"
}
これはあなたのDBに接続し、TypeOrmマジックを楽しみ始めることができます.これは最も基本的な接続です、そして、あなたのユースケースが正確に何であるかについて、typeRMを調整する多くのより多くのオプションがあります.あなたはこれらのオプションの多くを見つけることができますnode-postgres .
一度ここにあなただけであなたの頭にされているもう一つのことを行う必要があります正しい資格情報を持っているindex.{ts/js} ファイルといくつかの行のコードを入れます.このステップの後に設定が行われ、あなたが好きなオブジェクトを構築することができます.
つの行のコードがここで仕事を得るでしょう.
import { createConnection } from "typeorm";


await createConnection();
あなたが私のインデックスの正確な構造を見たいならば.TSファイルは、上記のリンクを使ってソースコードを見ることができます.

尺骨


私のアプリケーションでは、複雑なデータを必要としませんでした.記録するだけUsers , そして、私のコラムUsers は複雑ではなかった.これは、我々のデータモデルが狂っていないので、良い導入でなければなりません、そして、あなたがあなたがここで見るものが好きであるならば、あなたはあなた自身の上でより多くのタイプにより深く掘り下げることができます.
あなたが私のコードを使っているならば、あなたは見てみたいですentity/User.ts , ここで記入する場所は次のとおりです.

import {Entity, PrimaryGeneratedColumn, Column, BaseEntity} from "typeorm";

@Entity()
export class User extends BaseEntity {

    @PrimaryGeneratedColumn()
    id: number;

    @Column("text", {nullable: true})
    postalCode: string | null;

    @Column("text",{nullable: true})
    priceId: string;

    @Column("text", {nullable: true})
    stripeId: string;

    @Column("text", {nullable: true})
    ccLast4: string;

    @Column("text")
    email: string;

    @Column("text", {default: "free-trial"})
    type: string;

    @Column("text")
    password: string;
}
これは多くのように見えるかもしれないが、それは本当にない.
typeRMは、デコレータを使用してすべてを定義します.
私たちの非常に最初の行を定義するEntity を使用して@Entity デコレータ.エンティティは、単にSQLデータベース表にマップするクラスです.
@Entity()
export class User extends BaseEntity
私はそのことを詳しく説明しないBaseEntity 部分的に、このポストの範囲の外にあるアクティブな記録とデータマッパーパターンをサポートしているtypeRMと関係があるので.しかし、私はアクティブなレコードを使用することを選びましたBaseEntity 代わりにエクスポートするだけでUser クラス.
上の2行で新しいクラスを作っていますUser JavaScriptで動作するように.このクラスは、Postgresのテーブルにマップします.私もそれを輸出していますUser 私のコードの他の場所.私はこのアプリでGraphqlを使用するので、私はすることができますimport { User } from "entity/User" 私のリゾルバでは、次にどのようにデータを操作し、それを私のデータベースに戻します.
しかし、typeRMには規則があります.すべてのエンティティは1つの主な列を持つ必要があります.いくつかの主要な列がありますが、ここでは以下のように使います:
@PrimaryGeneratedColumn()
id: number;
これは、より多くのユーザーが作成されるとき、自動インクリメントされる数値を自動的に生成するでしょう.
ここから私たちはこのコードの残りを理解することができます.我々は、ちょうど我々の規則コラムを加えていますUser クラス.列をカスタマイズできますbit . 私はすぐに私は次の列で何を行うに行くだろうし、レースにオフになります!
@Column("text", {nullable:true})
postalCode: string | null;
  • @Column("text", {nullable:true}) 私たちは@column , になるデータ型"text"
  • 私たちはそれをNULLであることを許しています{nullable:true} .
  • 次の行でpostalCode: string | null;私たちは列に名前を付けているpostalCode そして、型を与えるためにtypescriptを使用すること.
  • それは私がこのプロジェクトでtypeRMを使用するときに学んだほとんどすべてをカバーします.私は、あなたが沿って従うことができて、ものまたは2つを学ぶことができたことを望みます!