HOOK

sting01·2023년 6월 14일

sveltekit

목록 보기
9/9

client와 server용 두가지로 제어

파일 위치

  • src/hooks.client.ts,js
  • src/hooks.server.ts.js

사용가능한 hook
handle, handleFetch, handleError

client와 server error hook이 다른 부분이 있음.

server

  • handleError: HandleServerError
  • event: RequestEvent
export const handle1: Handle = async ({ event, resolve }) => {
	const { url, locals, cookies, isDataRequest } = event;

	// if (url.pathname === '/products') {
	// 	return new Response('custom response');
	// }

	if (!isDataRequest && url.pathname.startsWith('/api')) {
		const token = cookies.get('token');

		locals.user = token ? { name: 'John', id: 1 } : undefined;
	} else if (url.pathname.startsWith('/hook')) {
		return new Response('custom response');
	}

	const response = await resolve(event);

	// response.headers.set('x-custom-header', 'value');

	return response;
};

export const handle = sequence(handle1);

export const handleFetch: HandleFetch = async ({ request, fetch, event }) => {
	if (request.url.startsWith('http://dummyjson.com')) {
		const cookie = event.request.headers.get('cookie');

		if (cookie) {
			request.headers.set('cookie', cookie);
		}
	}

	return fetch(request);
};

export const handleError: HandleServerError = async ({ error, event }) => {
	console.log('this is not responding');
	console.log(error, event);

	return {
		message: error.message,
		code: 'error code 훅'
	};
};

server

  • handleError: HandleClientError
  • event: NavigationEvent
import type { HandleClientError } from '@sveltejs/kit';

export const handleError: HandleClientError = async ({ error, event }) => {
	console.log('this is not responding 클라이언트');
	console.log(error, event);

	return {
		message: error.message,
		code: 'error code 훅'
	};
};

hook 여러개 사용시 sequence 사용

export const handle = sequence(handle1);

이용가능한 parameter 값

{event, resolve, fetch, request, error}

const { url, locals, cookies, isDataRequest } = event;

0개의 댓글