API ルートは、受け取ったリクエスト (req
) をパースするための組み込みミドルウェアを提供しています。以下、それらのミドルウェアです:
req.cookies
- リクエストにより送られてきた Cookie が格納されているオブジェクトです。デフォルト値は {}
ですreq.query
- クエリ文字列が格納されているオブジェクトです。デフォルト値は {}
ですreq.body
- content-type
によりパースされたボディが格納されているオブジェクトです。ボディが含まれていなかった場合は null
となります次のように、すべての API ルートは config
オブジェクトをエクスポートすることで、デフォルトの設定を変更できます:
export const config = {
api: {
bodyParser: {
sizeLimit: '1mb'
}
}
};
api
オブジェクトには API ルートで利用できるすべての設定が含まれます。
bodyParser
はボディのパースを有効にできます。もし、Stream
として利用したい場合は無効にもできます:
export const config = {
api: {
bodyParser: false
}
};
bodyParser.sizeLimit
は、次のようにパースされたボディに対して bytes でサポートされている任意の形式を用いて許可する最大サイズのことです:
export const config = {
api: {
bodyParser: {
sizeLimit: '500kb'
}
}
};
externalResolver
はルーティングが express や connect のような外部リゾルバによって処理されていることをサーバーに伝える明示的なフラグです。このオプションを有効にすると、未解決のリクエストに対する警告を無効にできます。
export const config = {
api: {
externalResolver: true
}
};
また、Connect と互換性のあるミドルウェアも利用できます。
例えば、cors パッケージを活用することで API エンドポイントに CORS 設定をできます。
まず、cors
をインストールします:
npm i cors
# または
yarn add cors
それでは、API ルートに cors
を追加してみましょう:
import Cors from 'cors';
// CORS のミドルウェアを初期化
const cors = Cors({
methods: ['GET', 'HEAD']
});
// 後続の処理を行う前にミドルウェアの実行を待ち、
// また、ミドルウェアでエラーが発生したときエラーを投げるためのヘルパーメソッド
function runMiddleware(req, res, fn) {
return new Promise((resolve, reject) => {
fn(req, res, result => {
if (result instanceof Error) {
return reject(result);
}
return resolve(result);
});
});
}
async function handler(req, res) {
// ミドルウェアを実行する
await runMiddleware(req, res, cors);
// API ロジックの残り部分
res.json({ message: 'Hello Everyone!' });
}
export default handler;
完成したアプリを見るには、CORS を用いた API ルートの例を参照してください。