generated at
fastify
概要
Node.js向けの高速なWebアプリケーションフレームワーク

サーバの起動
fastify#listen を呼ぶと、サーバを起動できます。
javascript
const fastify = require('fastify')(); const port = 3000; fastify.listen(port, (err, address) => { ... });
またfastify-cliを使って起動することも可能です

ルーティング
fastify#get fastify#post 等を使って定義します
javascript
fastify.get('/', async (req, reply) => { // 親のプラグイン(api/index.js)で`knex`が登録されているため、ここで参照が可能 return await doSomething(req); });

プラグインシステムについて
プラグインの実体は (fastify, options, next) => any のようなシグネチャを持つ関数です
fastify#register によってプラグインを登録できます
プラグインにはスコープが存在し、各プラグインごとに適用範囲を細かく制限できます
プラグインには親子関係が存在します
子のプラグインは、親のプラグインのスコープを継承するため、親側で登録されたプラグインも利用できます
子のプラグインで登録されたプラグインは、親のプラグインには適用されません (利用できません)
fastify-plugin
プラグインを記述するときに使用するnpmモジュールです
プラグインの登録

バリデーション
fastifyajvというJSON Schemaベースのバリデーションライブラリを採用しています
fastify#get 等のメソッドでルートを定義する際にスキーマを渡すと、その定義をもとにバリデーションが行われます
fastify#{post|patch|get}(path, schema, handler);
schema 引数にバリデーションルールを定義したオブジェクトを渡します(fluent-schemaを使うと楽そうです)
schema 引数を指定すると、JSONのシリアライズ/デシリアライズが高速されるので、指定することを推奨します

ロギング
fastifyは標準でpinoを採用しています
javascript
const fastify = Fastify({ logger: false }); // ロギングを無効化(デフォルト) const fastify = Fastify({ logger: { level: 'info' } }); fastify.log.info('[info] hoge'); // 出力される fastify.log.error('[error]'); // 出力されない const fastify = Fastify({ logger: { level: 'error' } }); fastify.log.info('[info] hoge'); // 出力されない fastify.log.error('[error] error'); // 出力される
fastify のファクトリ関数の logger オプションで、ロギングに関する設定を変更できます

TypeScript対応について
fastifyのnpmモジュールは標準で型定義ファイルを提供しています
また、Nest.jsfastify向けのアダプタを提供しているので、そちらを利用するのも手かと思います

プラグイン
https://github.com/fastify/under-pressure - Process load measuring plugin for Fastify, with automatic handling of "Service Unavailable"

参考