-
Notifications
You must be signed in to change notification settings - Fork 1
03 TypeORM
JP Barbosa edited this page Apr 17, 2021
·
3 revisions
yarn add typeorm pg reflect-metadata
Obs.: if you prefer you may use MySQL as well.
code ./.env
...
TYPEORM_CONNECTION=postgres
TYPEORM_HOST=localhost
TYPEORM_PORT=5432
TYPEORM_USERNAME=USER
TYPEORM_PASSWORD=PASS
TYPEORM_DATABASE=typescript-crud
TYPEORM_SYNCHRONIZE=true
TYPEORM_LOGGING=false
TYPEORM_ENTITIES=build/entity/*.js
Obs.: copy variables without passwords to .env.example
mkdir ./src/entity
code ./src/entity/Record.ts
import { Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export abstract class Record {
@PrimaryGeneratedColumn()
id: number;
}
code ./src/entity/Article.ts
import { Entity, Column } from 'typeorm';
import { Record } from './Record';
@Entity()
export class Article extends Record {
@Column()
title: string;
@Column()
text: string;
}
code ./src/controllers/records.ts
import { Repository } from 'typeorm';
import { Request, Response } from 'express';
export const recordsController = <T>(repository: Repository<T>) => {
const findAll = async (req: Request, res: Response) => {
// return all records
const results = await repository.find();
return res.send(results);
};
const findOne = async (req: Request, res: Response) => {
// return one record by id
const results = await repository.findOne(req.params.id);
return res.send(results);
};
const create = async (req: Request, res: Response) => {
// create a new record
const record = repository.create(req.body);
const results = await repository.save(record);
return res.send(results);
};
const update = async (req: Request, res: Response) => {
// update a record by a given id
const record = await repository.findOne(req.params.id);
repository.merge(record, req.body);
const results = await repository.save(record);
return res.send(results);
};
const remove = async (req: Request, res: Response) => {
// delete a record by a given id
const results = await repository.delete(req.params.id);
return res.send(results);
};
return { findAll, findOne, create, update, remove };
};
code ./src/controllers/articles.ts
import { getRepository } from 'typeorm';
import { Article } from '../entity/Article';
import { recordsController } from './records';
export const articlesController = () => {
const repository = getRepository(Article);
return recordsController<Article>(repository);
};
code ./src/index.ts
import { createConnection } from 'typeorm';
import { config as configDotenv } from 'dotenv';
import { app } from './app';
configDotenv();
const port = parseInt(process.env.PORT);
const run = async () => {
const connection = await createConnection();
await app(port);
};
run();
createdb typescript-crud #postgres
#mysql -u USERNAME -p -e 'CREATE DATABASE `typescript-crud`'
yarn dev
curl -X POST -H "Content-Type: application/json" \
-d '{"title":"First Article", "text":"First Article Text"}' \
http://localhost:4000/articles
# {"title":"First Article","text":"First Article Text","id":1}
curl http://localhost:4000/articles
# [{"id":1,"title":"First Article","text":"First Article Text"}]
git add .
git commit -m "TypeORM"