2.8 KiB
2.8 KiB
description |
---|
API Routes provide built-in middlewares that parse the incoming request. Learn more about them here. |
API Middlewares
API routes provide built in middlewares which parse the incoming request (req
). Those middlewares are:
req.cookies
- An object containing the cookies sent by the request. Defaults to{}
req.query
- An object containing the query string. Defaults to{}
req.body
- An object containing the body parsed bycontent-type
, ornull
if no body was sent
Custom config
Every API route can export a config
object to change the default configs, which are the following:
export const config = {
api: {
bodyParser: {
sizeLimit: '1mb',
},
},
}
The api
object includes all configs available for API routes.
bodyParser
Enables body parsing, you can disable it if you want to consume it as a Stream
:
export const config = {
api: {
bodyParser: false,
},
}
bodyParser.sizeLimit
is the maximum size allowed for the parsed body, in any format supported by bytes, like so:
export const config = {
api: {
bodyParser: {
sizeLimit: '500kb',
},
},
}
Connect/Express middleware support
You can also use Connect compatible middleware.
For example, configuring CORS for your API endpoint can be done leveraging the cors package.
First, install cors
:
npm i cors
# or
yarn add cors
Now, let's add cors
to the API route:
import Cors from 'cors'
// Initializing the cors middleware
const cors = Cors({
methods: ['GET', 'HEAD'],
})
// Helper method to wait for a middleware to execute before continuing
// And to throw an error when an error happens in a middleware
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) {
// Run the middleware
await runMiddleware(req, res, cors)
// Rest of the API logic
res.json({ message: 'Hello Everyone!' })
}
export default handler
Go to the API Routes with CORS example to see the finished app