Fastify
ルートの定義
このスクリプトを実行する。
code:ts
import Fastify from 'fastify';
const fastify = Fastify({
logger: true,
});
// ルートの定義
fastify.get('/', async (req, rep) => {
return { hello: 'world' };
});
// サーバーの立ち上げ
const start = async () => {
try {
await fastify.listen({ port: 3000 });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
}
// 定義した立ち上げ処理を実行する。
start();
プラグイン
FastifyInstanceとFastifyPluginOptionsを引数にとるasync functionがプラグインになる。
code:ts
export const myPlugin: FastifyPluginAsync = async (fastify: FastifyInstance, options: FastifyPluginOptions) => {
fastify.get('/', async (req, rep) => {
return { hello: 'world' };
});
}
プラグインの中では、ルートの定義やHooksを書いたり、さらに別のプラグインをregisterしたりすることができる。
プラグインを使う時は
code:ts
import { myPlugin } from 'myPlugin.js';
fastifyInstance.register(myPlugin);
FastifyInstance.registerするとスコープがつくられる。
プラグインの中ではレスポンスの加工などをする。
加工結果はそのプラグインのスコープの中からじゃないと見えない。
スコープの外から加工結果が見えることはない。
「認証が必要な部分はこのスコープの中に、不要な部分は別のスコープの中に」という書き方が可能になる。
静的ファイルを返す。
code:ts
import fastifyStatic from '@fastify/static';
fastifyInstance.register(fastifyStatic, {
root: path.join(__dirname, 'static'),
prefix: '/',
});
fastify.get('/', (req, rep) => {
return rep.sendFile('index.html');
});
FastifyStaticOptionsにwildcard: trueを指定すると、ディレクトリの子孫がすべてserve対象になる。
See also: