NestJS의 NoSQL Azure 테이블 스토리지 소개🚀
Originally published on the Trilon Blog on September 17, 2019.
본고에서 우리는 새로운
@nestjs/azure-database
라이브러리를 사용하여 몇 분 안에 Azure 테이블 저장소를 우리의 NestJS 응용 프로그램에 추가하는 방법을 연구할 것이다!익숙하지 않은 경우NestJS, TypeScript 노드입니다.js 프레임워크는 기업급의 효율적이고 확장 가능한 노드를 구축하는 데 도움을 줍니다.js 응용 프로그램.
Azure 테이블 스토리지란 무엇입니까?
Azure Table Storage는 대량의 반구조화된 데이터 세트를 사용하는 NoSQL 키 값 저장소입니다.
표 저장소를 사용하면 유연한 데이터 패턴이 필요한 대규모 확장 가능한 응용 프로그램을 만들 수 있습니다.또한 OData 기반 질의를 수행하고 JSON 서열화 데이터를 사용할 수도 있습니다.
Azure 테이블 스토리지를 사용하여 수 PB의 반구조화된 데이터를 저장하고 비용을 절감합니다.
많은 로컬 또는 클라우드 기반 데이터 저장소와 다릅니다.
설정 가져오기
NOTE: In this demonstration, we'll be showcasing a new NestJS application generated by the CLI, but if you prefer to use an existing NestJS application - feel free - and just skip ahead!
새 NestJS 애플리케이션 생성
프레젠테이션을 위해 최신 NestJS CLI가 설치되어 있는지 확인하고 새 응용 프로그램을 만듭니다.
$ npm i -g @nestjs/cli
$ nest new PROJECT_NAME
이제 새로 만든 디렉토리에 들어가서 IDE를 엽니다.이제 NestJS 어플리케이션이 간단하게 생성되었습니다.
Azure 스토리지 계정 설정
Table Storage를 사용하려면 Azure 스토리지 계정을 만들어야 합니다.이 작업을 수행할 수 있습니다step by step guide.
스토리지 계정을 생성한 후에는 SDK에 사용할 접속 문자열을 복사해야 합니다.Azure Portal 에서 Dashboard>Storage>your Storage account로 이동합니다.
설정 탭의 액세스 키에서 얻은 스토리지 계정 이름과 접속 문자열을 기록합니다.
TIP: The connection string should start with DefaultEndpointsProtocol=
NestJS Azure 스토리지 설치
이제 NPM에서 SDKcd
를 설치해야 합니다.
$ npm i --save @nestjs/azure-database dotenv
We also install the dotenv
package that allows us to deal with environment variables.
그런 다음 라는 파일을 만듭니다.env에는 다음과 같은 내용이 있습니다.
AZURE_STORAGE_CONNECTION_STRING="<the connection string we copied from previous step>"
마찬가지로 중요한 것은: @nestjs/azure-database
파일을 .env
에 추가해야 한다는 것입니다!.gitignore
파일을 Git에서 버전 제어할 수 없습니다..env
파일을 만들고 준비가 완료되면 .env
파일에 대한 다음 호출이 포함됩니다.
if (process.env.NODE_ENV !== 'production') require('dotenv').config();
TIP: This line must be added before any other imports in the src/main.ts
file!
우리의 설정은 이미 준비가 되었다.응용 프로그램의 논리를 실현합시다.
비즈니스 논리 준비
NestJS의 Azure 테이블 저장소는 객체 관계 매핑(ORM) 설계 모델을 지원합니다. 이것은 기본적으로 저희 코드에서 데이터베이스에 접근하는'구조적'방식입니다. 실제 SQL 코드를 작성하는 것이 아니라 API를 사용할 수 있습니다.
이러한 디자인 모델을 실현하기 위해서는 각 기능에 대해 다음과 같은 구성 요소를 만들어야 한다.
NOTE: In this demonstration, we'll be showcasing a new NestJS application generated by the CLI, but if you prefer to use an existing NestJS application - feel free - and just skip ahead!
$ npm i -g @nestjs/cli
$ nest new PROJECT_NAME
TIP: The connection string should start with DefaultEndpointsProtocol=
이제 NPM에서 SDK
cd
를 설치해야 합니다.$ npm i --save @nestjs/azure-database dotenv
We also install the
dotenv
package that allows us to deal with environment variables.
그런 다음 라는 파일을 만듭니다.env에는 다음과 같은 내용이 있습니다.
AZURE_STORAGE_CONNECTION_STRING="<the connection string we copied from previous step>"
마찬가지로 중요한 것은: @nestjs/azure-database
파일을 .env
에 추가해야 한다는 것입니다!.gitignore
파일을 Git에서 버전 제어할 수 없습니다..env
파일을 만들고 준비가 완료되면 .env
파일에 대한 다음 호출이 포함됩니다.if (process.env.NODE_ENV !== 'production') require('dotenv').config();
TIP: This line must be added before any other imports in the
src/main.ts
file!
우리의 설정은 이미 준비가 되었다.응용 프로그램의 논리를 실현합시다.
비즈니스 논리 준비
NestJS의 Azure 테이블 저장소는 객체 관계 매핑(ORM) 설계 모델을 지원합니다. 이것은 기본적으로 저희 코드에서 데이터베이스에 접근하는'구조적'방식입니다. 실제 SQL 코드를 작성하는 것이 아니라 API를 사용할 수 있습니다.
이러한 디자인 모델을 실현하기 위해서는 각 기능에 대해 다음과 같은 구성 요소를 만들어야 한다.
src/main.ts
(또는 데이터 전송 객체)DTO
Entity
Repository
기능을 생성합니다.$ nest generate module cat
NOTE: We will come back to our generated module at the end of the process.
DTO 회사
Cat
기능의 첫 번째 구성 요소는 DTO입니다.Cat
라는 파일에서 다음과 같은 클래스를 만들었습니다.export class CatDTO {
name: string;
age: number;
}
실체
다음으로 우리는 하나
cat.dto.ts
가 필요하다.이를 위해 Entity
라는 파일을 만들고 cat.entity.ts
에서 제공하는 장식기를 사용하여 모델을 설명합니다.실체
대표
요구했어
@nestjs/azure-database
솔리드 @EntityPartitionKey(value: string)
맞다PartitionKey
솔리드 @EntityRowKey(value: string)
맞다RowKey
기호 32비트 정수 값 있음@EntityInt32(value?: string)
64비트 정수 기호 있음@EntityInt64(value?: string)
바이너리 (blob) 데이터@EntityBinary(value?: string)
@EntityBoolean(value?: string)
또는 true
값false
문자 데이터@EntityString(value?: string)
15위 정밀도의 부동 소수점@EntityDouble(value?: string)
하루 중 시간Note: The API might slightly change in the stable release.
예를 들어, 다음 솔리드의 형태는 다음과 같습니다.
import {
EntityPartitionKey,
EntityRowKey,
EntityString,
EntityIn32
} from '@nestjs/azure-database';
@EntityPartitionKey('CatID')
@EntityRowKey('CatName')
export class Cat {
@EntityString() name: string;
@EntityIn32() age: number;
}
@EntityDateTime(value?: string)
엔티티는 Azure 테이블 스토리지의 다음 아키텍처로 자동으로 변환됩니다.{
"PartitionKey": { "_": "CatID", "$": "Edm.String" },
"RowKey": { "_": "CatName", "$": "Edm.String" },
"name": { "_": undefined, "$": "Edm.String" },
"age": { "_": undefined, "$": "Edm.Int32" }
}
저장소
DTO와 실체 다음에
Cat
실체와 관련된 모든 CRUD 작업을 추상화하는 Cat
서비스를 만들어야 합니다.이 서비스는 Azure 테이블 스토리지Cat
를 사용합니다.NestJS CLI를 사용하여 서비스를 생성합니다.
$ nest generate service cat
생성된 Repository
에서 가져오기cat.service.ts
및 이전 단계에서 생성된 Repository
엔티티 정의를 제공합니다.import { Injectable } from '@nestjs/common';
import { Repository, InjectRepository } from '@nestjs/azure-database';
import { Cat } from './cat.entity';
@Injectable()
export class CatService {
constructor(
@InjectRepository(Cat)
private readonly catRepository: Repository<Cat>,
) {}
// ... other code ...
Azure 테이블 스토리지Cat
인터페이스는 다양한 CRUD(Repository
, Create
, Read
및 Update
작업을 관리하는 데 사용되는 일련의 공공 API와 유형을 제공합니다.Delete
SDK를 사용하여 각기 다른 작업을 수행하는 방법을 살펴보겠습니다.다음 방법을 사용합니다.
@nestjs/azure-database
새 엔티티를 작성합니다.create(entity: T): Promise<T>
주어진 질의와 일치하는 모든 엔티티를 찾습니다(질의가 제공되지 않으면 모든 엔티티를 반환합니다).findAll(tableQuery?: azure.TableQuery, currentToken?: azure.TableService.TableContinuationToken): Promise<AzureTableStorageResultList<T>>
행 키를 사용하여 엔티티를 찾습니다.find(rowKey: string, entity: Partial<T>): Promise<T>
엔티티를 업데이트합니다.이것은 부분 업데이트를 진행할 것이다.update(rowKey: string, entity: Partial<T>): Promise<T>
솔리드의 행 키를 사용하여 솔리드를 삭제합니다.다음은 이러한 구현의 예입니다.
import { Injectable } from '@nestjs/common';
import { Repository, InjectRepository } from '@nestjs/azure-database';
import { Cat } from './cat.entity';
@Injectable()
export class CatService {
constructor(
@InjectRepository(Cat)
private readonly catRepository: Repository<Cat>,
) {}
// find one cat entitu by its rowKey
async find(rowKey: string, cat: Cat): Promise<Cat> {
return this.catRepository.find(rowKey, cat);
}
// find all cat entities
async findAll(): Promise<AzureTableStorageResultList<Cat>> {
return this.catRepository.findAll();
}
// create a new cat entity
async create(cat: Cat): Promise<Cat> {
return this.catRepository.create(cat);
}
// update the a cat entity by its rowKey
async update(rowKey: string, cat: Partial<Cat>): Promise<Cat> {
return this.catRepository.update(rowKey, cat);
}
// delete a cat entity by its rowKey
async delete(rowKey: string, cat: Cat): Promise<AzureTableStorageResponse> {
return this.catRepository.delete(rowKey, cat);
}
}
컨트롤러
마지막 단계는 HTTP 요청을 처리하는 NestJS 컨트롤러를 구현하는 것입니다.NestJS CLI를 사용하여 이러한 컨트롤러를 만듭니다.
$ nest generate controller cat
컨트롤러의 실현은 매우 간단합니다. 아마도 응용 프로그램의 업무 수요에 달려 있을 것입니다.다음은 구현 예제입니다.import {
Body,
Controller,
Delete,
Get,
Param,
Post,
Put,
UnprocessableEntityException,
NotFoundException,
Patch
} from '@nestjs/common';
import { CatDto } from './cat.dto';
import { Cat } from './cat.entity';
import { CatService } from './cat.service';
@Controller('cats')
export class CatController {
constructor(private readonly catService: CatService) {}
@Get()
async getAllCats() {
return await this.catService.findAll();
}
@Get(':rowKey')
async getCat(@Param('rowKey') rowKey) {
try {
return await this.catService.find(rowKey, new Cat());
} catch (error) {
// Entity not found
throw new NotFoundException(error);
}
}
@Post()
async createCat(
@Body()
catData: CatDto,
) {
try {
const cat = new Cat();
// Disclaimer: Assign only the properties you are expecting!
Object.assign(cat, catData);
return await this.catService.create(cat);
} catch (error) {
throw new UnprocessableEntityException(error);
}
}
@Put(':rowKey')
async saveCat(@Param('rowKey') rowKey, @Body() catData: CatDto) {
try {
const cat = new Cat();
// Disclaimer: Assign only the properties you are expecting!
Object.assign(cat, catData);
return await this.catService.update(rowKey, cat);
} catch (error) {
throw new UnprocessableEntityException(error);
}
}
@Patch(':rowKey')
async updateCatDetails(@Param('rowKey') rowKey, @Body() catData: Partial<CatDto>) {
try {
const cat = new Cat();
// Disclaimer: Assign only the properties you are expecting!
Object.assign(cat, catData);
return await this.catService.update(rowKey, cat);
} catch (error) {
throw new UnprocessableEntityException(error);
}
}
@Delete(':rowKey')
async deleteDelete(@Param('rowKey') rowKey) {
try {
const response = await this.catService.delete(rowKey, new Cat());
if (response.statusCode === 204) {
return null;
} else {
throw new UnprocessableEntityException(response);
}
} catch (error) {
throw new UnprocessableEntityException(error);
}
}
}
모든 것을 한데 모으다
우리는 이미 delete(rowKey: string, entity: T): Promise<AzureTableStorageResponse>
기능의 실현을 완성했다.마지막 단계에서 이전에 만든 Nest feature moduleCat
내부 가져오기AzureTableStorageModule
가 필요합니다.
import { Module } from '@nestjs/common';
import { AzureTableStorageModule } from '@nestjs/azure-database';
import { CatController } from './cat.controller';
import { CatService } from './cat.service';
import { Cat } from './cat.entity';
@Module({
imports: [AzureTableStorageModule.forFeature(Cat)],
providers: [CatService],
controllers: [CatController],
})
export class CatModule {}
cat.module.ts
모듈은 다음과 같은 몇 가지 옵션 매개변수를 수용합니다.
AzureTableStorageModule.forFeature(Cat, {
table: 'AnotherTableName',
createTableIfNotExists: true,
})
import { Module } from '@nestjs/common';
import { AzureTableStorageModule } from '@nestjs/azure-database';
import { CatController } from './cat.controller';
import { CatService } from './cat.service';
import { Cat } from './cat.entity';
@Module({
imports: [AzureTableStorageModule.forFeature(Cat)],
providers: [CatService],
controllers: [CatController],
})
export class CatModule {}
AzureTableStorageModule.forFeature(Cat, {
table: 'AnotherTableName',
createTableIfNotExists: true,
})
AzureTableStorageModule
: 테이블의 이름입니다.제공되지 않으면 Cat 엔티티 이름이 테이블 이름으로 사용됩니다table: string
: 테이블이 없으면 자동으로 생성됩니까?createTableIfNotExists: boolean
응용 프로그램이 시작되는 동안 테이블을 만듭니다.true
테이블을 만들지 않습니다.조회하기 전에, 당신은 반드시 스스로 표를 만들어야 합니다!어쨌든
우리는 방금 우리의 응용 프로그램에 새로운 false
기능을 실현했다. 이것은 Cat
공식 소프트웨어 패키지를 사용하여 Azure 테이블 저장소에 대한 지원을 추가한다.NestJS의 모듈화 시스템이 있으면 우리는 그것을 설치하고 우리의 응용 프로그램으로 그것을 설정할 수 있다. 마치 로컬 Nest 기능과 같다!
서버가 없는 Azureread more here NestJS 응용 프로그램에 대한 자세한 내용을 알고 싶으시면
회사 명
/
azure 데이터베이스
Nest framework(node.js)의 Azure 데이터베이스(테이블 저장소 등) 모듈☁️
효율적이고 확장 가능한 서버 측 응용 프로그램을 구축하는 데 사용되는 점진적 Node.js 프레임워크.
묘사
Table Storage 프레임워크(node.js)의 Azure 데이터베이스(Cosmos DB, Nest 및 그 이상) 모듈
지도의
시작 방법 이해 Azure table storage for NestJS
설치 전
테이블 스토리지용
설치
$npm i-@nestjs/azure 데이터베이스 저장
활용단어참조
Azure 테이블 스토리지 지원
Reference
이 문제에 관하여(NestJS의 NoSQL Azure 테이블 스토리지 소개🚀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/azure/introducing-nosql-azure-table-storage-for-nestjs-291m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)