株式会社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できそう