ウェブフロント
- angular
- corewebvitals
- editorconfig
- gatsby
- hls
- html
- javascript
querySelectorAllで取得した要素は配列ではないらしい
JavaScript 配列内のオブジェクトの更新ってどうする?
デバッグ関数とかnullチェック関数をutil/index.tsにおいとけば楽なことに今頃気づいた。
ブラウザからジャイロセンサーを使ってみる
JS 画像のアップロード、プレビュー機能を実装
「数値から各桁の値を取り出す処理」って言われたら数学的な処理が一番に思い浮かぶけど、JSならそんなことなかった。
Callback時代の関数をPromise化する
個人的実装されてほしいECMA Script Proposal
JavaScriptのprototypeを使う
音声をなみなみさせる
AudioWorkletとAudioWorkletProcessorを使って音声のビジュアライゼーション
- next
- nuxt
- playwright
- prettier
- react
- reactnative
- tensorflowjs
- tools
- typescript
- wasm
- websocket
- ポエム
- 開発環境
サーバー
その他
NestJSとWebSocket
導入
NestJSでWebSocketを扱うためには
@nestjs/platform-socket.io
と@nestjs/websockets
が必要です。
ついでに@types/socket.io
も入れておきましょう。メッセージをブロードキャストするだけの処理は以下のようになります。
chat.gateway.ts
@WebSocketGateway()
export class ChatGateway {
@WebSocketServer()
server: Server;
@SubscribeMessage('message')
handleMessage(@MessageBody() message): void {
this.server.emit('message', message);
}
}
Gatewayの意味があまりわかっていませんが
@WebSocketGateway()
デコレーターが付いているコントローラーがエントリーポイントになります。corsの許可は
@WebSocketGateway({ cors: true})
のようになります。OnGatewayConnection
やOnGatewayDisconnect
を継承するとhandleConnection
やhandleDisconnect
を型付きで実装できます。バリテーションはRestAPIと同様にパイプをつかって実装します。
全体像はこんな感じ。
chat.gateway.ts
export class MessageDto {
@IsNotEmpty()
message: string;
}
@WebSocketGateway({ cors: true })
export class ChatGateway implements OnGatewayConnection, OnGatewayDisconnect {
private logger = new Logger('ChatGateway');
@WebSocketServer()
server: Server;
handleConnection() {
this.logger.log('connection');
}
handleDisconnect() {
this.logger.log('disconnect');
}
@UsePipes(new ValidationPipe())
@SubscribeMessage('message')
handleMessage(@MessageBody() message: MessageDto): void {
this.logger.log(message);
this.server.emit('message', message);
}
}
Thanks you for reading.