Just a combination of everything mentioned here.
As a set of functions you can put in a lirary and import as needed.
These will work on client and server
export const parseHeaders = (request: Request) => {
let headers = {};
for (let [name, value] of request.headers.entries()) {
headers[name] = value;
}
return headers;
};
export const parseQuery = (request: Request) => {
const url = new URL(request.url);
const query = parseSearchParams(url);
return query;
};
export const parseSearchParams = (url: URL) => {
const searchParams = new URLSearchParams(url.search);
let data = {};
for (let [name, value] of searchParams.entries()) {
data[name] = value;
}
return data;
};
export const parseRequest = (request: Request) => {
let query = parseQuery(request);
let headers = parseHeaders(request);
return { query, headers };
};
in a route,
export async function GET(request: Request) {
const { headers, query } = parseRequest(request);
in a client component without having to pass down props,
export function Component() {
const query = parseSearchParams(window.location);
}