71 lines
1.6 KiB
JavaScript
71 lines
1.6 KiB
JavaScript
/**
|
||
* Utils: Back-end
|
||
*/
|
||
|
||
import config from "../../config";
|
||
|
||
/**
|
||
* Register a new user
|
||
*/
|
||
export const userRegister = async (email, password) => {
|
||
return await requestApi("/users/register", "POST", { email, password });
|
||
};
|
||
|
||
/**
|
||
* Login a new user
|
||
*/
|
||
export const userLogin = async (email, password) => {
|
||
return await requestApi("/users/login", "POST", { email, password });
|
||
};
|
||
|
||
/**
|
||
* userGet
|
||
*/
|
||
export const userGet = async (token) => {
|
||
return await requestApi("/user", "POST", null, {
|
||
Authorization: `Bearer ${token}`,
|
||
});
|
||
};
|
||
|
||
/**
|
||
* API request to call the backend
|
||
*/
|
||
export const requestApi = async (
|
||
path = "",
|
||
method = "GET",
|
||
data = null,
|
||
headers = {}
|
||
) => {
|
||
// Check if API URL has been set
|
||
if (!config?.domains?.api) {
|
||
throw new Error(
|
||
`Error: Missing API Domain – Please add the API domain from your serverless Express.js back-end to this front-end application. You can do this in the "site" folder, in the "./config.js" file. Instructions are listed there and in the documentation.`
|
||
);
|
||
}
|
||
|
||
// Prepare URL
|
||
if (!path.startsWith("/")) {
|
||
path = `/${path}`;
|
||
}
|
||
const url = `${config.domains.api}${path}`;
|
||
|
||
// Set headers
|
||
headers = Object.assign({ "Content-Type": "application/json" }, headers);
|
||
|
||
// Default options are marked with *
|
||
const response = await fetch(url, {
|
||
method: method.toUpperCase(),
|
||
mode: "cors",
|
||
cache: "no-cache",
|
||
headers,
|
||
body: data ? JSON.stringify(data) : null,
|
||
});
|
||
|
||
if (response.status < 200 || response.status >= 300) {
|
||
const error = await response.json();
|
||
throw new Error(error.error);
|
||
}
|
||
|
||
return await response.json();
|
||
};
|