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 by content-type, or null if no body was sentEvery 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',
},
},
}
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