株式会社Fusic
Urata Daiki
Twitter: @daiki7nohe
GitHub: @7nohe
A progressive Node.js framework for building efficient and scalable server-side applications on top of TypeScript & JavaScript (ES6, ES7, ES8) heavily inspired by Angular 😻🚀
https://github.com/nestjs/nest
TypeScript
import { Injectable } from '@angular/core';
import { HEROES } from './mock-heroes';
import { Logger } from '../logger.service';
@Injectable({
providedIn: 'root',
})
export class HeroService {
constructor(private logger: Logger) { }
getHeroes() {
this.logger.log('Getting heroes ...');
return HEROES;
}
}
import { Injectable, Inject } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Photo } from './photo.entity';
@Injectable()
export class PhotoService {
constructor(
@InjectRepository(Photo)
private readonly photoRepository: Repository<Photo>,
) {}
async findAll(): Promise<Photo[]> {
return await this.photoRepository.find();
}
}
GraphQL
WebSocket
Microservices (Redis, MQTT, gRPCなど)
MVCパターン (hbsテンプレート)
RDB(MySQL, PostgreSQL): TypeORM
MongoDB: Mongoose
// database.provider.ts
import { createConnection } from 'typeorm';
export const databaseProviders = [
{
provide: 'DbConnectionToken',
useFactory: async () => await createConnection({
type: 'mysql',
host: 'myhost',
port: 3306,
username: 'root',
password: 'root',
database: 'root',
entities: [
__dirname + '/../**/*.entity{.ts,.js}',
],
synchronize: true,
}),
},
];
// todo.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Todo {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 500 })
title: string;
@Column('text')
description: string;
@Column()
archive: boolean;
}
$ nest generate service users
# OR
$ nest g s users
$ docker pull nestjs/cli:5.3.0
TypeScriptで型のある開発ができる
Angularライクに書ける (DIパターン, CLI)
学習コストが高い (Angularをやってれば低い?)
まだまだ情報がない
Expressで動くので、そのままAngular UniversalでSSRできそう