Change headers

This commit is contained in:
Catalin Pinte 2022-10-20 13:18:57 +03:00
parent c27328f853
commit 685548cb81
2 changed files with 26 additions and 16 deletions

View File

@ -29,8 +29,8 @@ export const getInput = (req: NextRequest) => req.json().catch(() => ({}))
* @param path string
*/
export const transformRequest = (req: NextApiRequest, path: string) => {
let body
const headers = new Headers()
let body
for (let i = 0; i < req.rawHeaders.length; i += 2) {
headers.append(req.rawHeaders[i], req.rawHeaders[i + 1])
@ -51,8 +51,13 @@ export const transformRequest = (req: NextApiRequest, path: string) => {
})
}
/**
* Sets the custom headers received in the APIResponse in the
* @param headers Record<string, string|string[]> | Headers | undefined
* @returns Headers
*/
export const transformHeaders = (
headers?: Record<string, string | number | string[]> | Headers
headers: Record<string, string | number | string[]> | Headers = {}
) => {
if (headers instanceof Headers) {
return headers
@ -60,9 +65,24 @@ export const transformHeaders = (
const newHeaders = new Headers()
Object.entries(headers || {}).forEach(([key, value]) => {
Object.entries(headers).forEach(([key, value]) => {
newHeaders.append(key, value as string)
})
return newHeaders
}
export const setHeaders = (
res: NextApiResponse,
headers: Record<string, string | number | string[]> | Headers = {}
) => {
if (headers instanceof Headers) {
headers.forEach((value, key) => {
res.setHeader(key, value)
})
} else {
Object.entries(headers).forEach(([key, value]) => {
res.setHeader(key, value)
})
}
}

View File

@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'
import type { APIProvider, CommerceAPI, EndpointHandler } from '..'
import { normalizeApiError } from './errors'
import { transformRequest } from '.'
import { transformRequest, setHeaders } from '.'
export default function nodeHandler<P extends APIProvider>(
commerce: CommerceAPI<P>,
@ -47,17 +47,7 @@ export default function nodeHandler<P extends APIProvider>(
const output = await handlers[path](transformRequest(req, path))
const { status, errors, data, redirectTo, headers } = output
if (headers) {
if (headers instanceof Headers) {
headers.forEach((value, key) => {
res.setHeader(key, value)
})
} else {
Object.entries(headers).forEach(([key, value]) => {
res.setHeader(key, value)
})
}
}
setHeaders(res, headers)
if (output instanceof Response) {
return res.end(output.body)
@ -78,7 +68,7 @@ export default function nodeHandler<P extends APIProvider>(
return res.end(output.body)
}
const { status = 500, ...rest } = normalizeApiError(error)
const { status = 500, ...rest } = output
res.status(status).json(rest)
}
}