У меня есть автономный APIService.js, который используется в моем приложении NextJS, он делает несколько вещей, но главное - установить BASE_URL и, если пользователь вошел в систему (должен иметь токен в cookie или вфайл cookie заголовка - он затем отправляется в приставку).
В принципе, я думаю, что мне нужен этот APIService;определить, есть ли на компьютере cookie (он есть) или серверная часть отрисована, и получить его из заголовка;или то, что я считаю лучше - это прослушать изменения в редуксе и взять токен из хранилища редуксов.
Это мой APIService здесь;
import axios from 'axios';
import { Cookies } from 'react-cookie';
import { API_URL } from './constants';
const config = {
baseURL: API_URL,
};
const cookies = new Cookies();
const APIService = axios.create(config);
APIService.interceptors.request.use((request) => {
const token = cookies.get('token');
request.headers.Authorization = token ? `Bearer ${token}` : '';
return request;
});
export default APIService;
, чтобы привести примериспользование страницы NextJS;
У меня есть эта функция в моем _app.js
static async getInitialProps({ Component, ctx }) {
if (ctx.isServer) {
if (ctx.req.headers.cookie) {
const token = getCookie('token', ctx.req);
console.log('WHOAMI ', token);
ctx.store.dispatch(reauthenticate(token));
}
} else {
const { token } = ctx.store.getState().authentication;
console.log('WHOAMI2 ', token);
ctx.store.dispatch(reauthenticate(token));
}
return {
pageProps: Component.getInitialProps
? await Component.getInitialProps(ctx)
: {},
};
}
Нужно ли мне подключать () APIService к Redux - если да, то как я могу? Обычно я импортирую APIService в другие компоненты, где мне нужно использовать мой API, поэтому я не хочу вносить в него радикальные изменения, если это не является абсолютно необходимым.