Node.jsではじめる
このガイドでは、Node.js上でZeltアプリケーションをゼロから構築する方法を説明します。
前提条件
インストール
pnpm add @zeltjs/core @zeltjs/adapter-node
プロジェクト構成
my-app/
├── src/
│ ├── app.ts
│ ├── main.ts
│ └── controllers/
│ └── hello.controller.ts
├── package.json
└── tsconfig.json
Hello World
ステップ1: コントローラーの作成
コントローラーは受信HTTPリクエストを処理し、レスポンスを返します。各コントローラーは@Controllerでデコレートされたクラスで、ルートプレフィックスを定義します。
src/controllers/hello.controller.tsを作成:
import { Controller, Get, pathParam } from '@zeltjs/core';
@Controller('/hello')
export class HelloController {
@Get('/:name')
greet(name = pathParam('name')) {
return { message: `Hello, ${name}!` };
}
}
@Controller('/hello')— このコントローラー内のすべてのルートのベースパスを設定@Get('/:name')—/hello/:nameへのGETリクエストを処理pathParam('name')— URLパスからnameパラメータを抽出
ステップ2: アプリケーションの作成
src/app.tsを作成してコントローラーを接続:
import { createHttpApp } from '@zeltjs/core';
import { HelloController } from './controllers/hello.controller';
export const app = createHttpApp({
controllers: [HelloController],
});
ステップ3: サーバーの起動
Node.jsエントリーポイントsrc/main.tsを作成:
import { serve } from '@zeltjs/adapter-node';
import { app } from './app';
serve(app, { port: 3000 }, (info) => {
console.log(`Server running at http://localhost:${info.port}`);
});
ステップ4: TypeScriptの設定
tsconfig.jsonを作成:
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"strict": true,
"experimentalDecorators": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src"]
}
ステップ5: アプリケーションの実行
npx tsx src/main.ts
http://localhost:3000/hello/worldにアクセスすると:
{ "message": "Hello, world!" }
サービスの追加
サービスはビジネスロジックを含み、コントローラーに注入できます。@Injectableを使用してクラスをサービスとしてマークします。
src/services/greeting.service.tsを作成:
import { Injectable } from '@zeltjs/core';
@Injectable()
export class GreetingService {
greet(name: string): string {
return `Hello, ${name}!`;
}
}
サービスを使用するようにコントローラーを更新:
import { Controller, Get, pathParam, inject } from '@zeltjs/core';
import { GreetingService } from '../services/greeting.service';
@Controller('/hello')
export class HelloController {
constructor(private greetingService = inject(GreetingService)) {}
@Get('/:name')
greet(name = pathParam('name')) {
return { message: this.greetingService.greet(name) };
}
}
設定
Zeltは環境変数を管理するための設定クラスを提供します。
環境変数の使用
import { Controller, Get, inject } from '@zeltjs/core';
import { EnvService } from '@zeltjs/core';
@Controller('/config')
export class ConfigController {
constructor(private env = inject(EnvService)) {}
@Get('/api-host')
getApiHost() {
return { apiHost: this.env.get('API_HOST') ?? 'localhost' };
}
}
アプリに設定を登録:
import { createHttpApp, EnvConfig } from '@zeltjs/core';
export const app = createHttpApp({
controllers: [ConfigController],
configs: [EnvConfig],
});
Node.js固有の設定
@zeltjs/adapter-nodeパッケージは追加の設定オプションを提供します:
import { ProcessEnvConfig, DotEnvConfig } from '@zeltjs/adapter-node';
// ProcessEnvConfig: process.envから読み取り(デフォルト動作)
// DotEnvConfig: .envファイルから読み取り
次のステップ
基本的なアプリケーションが動作するようになったら、さらに多くの機能を探索しましょう: