カテゴリー
【Node.js活用講座】JSON Server(Express.js)でルーター内部でasync/awaitの処理をさせてみたときの話
※ 当ページには【広告/PR】を含む場合があります。
2022/05/02
Express/JSON-Serverで使える即席のasync/await対応
import { Request, Response, NextFunction, RequestHandler } from 'express';
type RequestHandler$ = {
(req: Request, res: Response, next: NextFunction): Promise<any>
};
export function pipe$(asyncFunc: RequestHandler$): RequestHandler {
return (req: Request, res: Response, next: NextFunction) => asyncFunc(req, res, next).catch(next);
}
ユースケース①〜直接パイプの中でasync関数をラップする
pipe$
import jsonServer from 'json-server';
import { Request, Response } from 'express';
import { echo, echo$ } from './middleware/echo.handler';
import { pipe$ } from './src/asyncPipe';
const endpoint = 'http://localhost:3000';
const server = jsonServer.create();
const router = jsonServer.router'db.json');
const middlewares = jsonServer.defaults();
server.use(middlewares);
//👇ミドルウェアとしてasync関数が利用できる
server.get('/user/:id', pipe$(async (req: Request, res: Response) => {
const id = req.params.id;
if (!id) { throw new Error('ID is Not Found!'); }
const user = {name: 'John', id};
res.status(200).json(user);
}));
server.use(router);
server.listen(3000, () => { console.log(`JSON Server is now running at ${endpoint}!`); });
ユースケース②〜外で定義したasync関数を使う
pipe$
import jsonServer from 'json-server';
import { Request, Response } from 'express';
import { echo, echo$ } from './middleware/echo.handler';
import { pipe$ } from './src/asyncPipe';
const endpoint = 'http://localhost:3000';
const server = jsonServer.create();
const router = jsonServer.router'db.json');
const middlewares = jsonServer.defaults();
server.use(middlewares);
//👇外に出したasync関数
async function getWho(req: Request, res: Response) {
const id = req.params.id;
if (!id) { throw new Error('ID is Not Found!'); }
const user = {name: 'John', id};
res.status(200).json(user);
}
server.get('/user/:id', pipe$(getWho));
server.use(router);
server.listen(3000, () => { console.log(`JSON Server is now running at ${endpoint}!`); });
ユースケース③〜外部モジュールで定義したasync関数を使う
import { Request, Response, RequestHandler } from 'express';
export async function getWho(req: Request, res: Response): Promise<any> {
const id = req.params.id;
if (!id) { throw new Error('ID is Not Found!'); }
const user = {name: 'John', id};
res.status(200).json(user);
};
import jsonServer from 'json-server';
import { pipe$ } from './src/asyncPipe';
import { getWho } from './src/util';
const endpoint = 'http://localhost:3000';
const server = jsonServer.create();
const router = jsonServer.router'db.json');
const middlewares = jsonServer.defaults();
server.use(middlewares);
//👇外部モジュールからasync関数を呼び出し
server.get('/user/:id', pipe$(getWho));
server.use(router);
server.listen(3000, () => { console.log(`JSON Server is now running at ${endpoint}!`); });
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー