27 lines
820 B
JavaScript
27 lines
820 B
JavaScript
let csrfToken = ''
|
||
|
||
export function setCsrf(value) {
|
||
csrfToken = value || ''
|
||
}
|
||
|
||
export async function api(path, options = {}) {
|
||
const method = options.method || 'GET'
|
||
const response = await fetch(`/api/admin${path}`, {
|
||
credentials: 'same-origin',
|
||
...options,
|
||
headers: {
|
||
...(options.body ? { 'Content-Type': 'application/json' } : {}),
|
||
...(!['GET', 'HEAD'].includes(method) && csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),
|
||
...options.headers,
|
||
},
|
||
})
|
||
if (!response.ok) {
|
||
let message = `请求失败(${response.status})`
|
||
try { message = (await response.json()).message || message } catch { /* empty response */ }
|
||
const error = new Error(message)
|
||
error.status = response.status
|
||
throw error
|
||
}
|
||
return response.status === 204 ? null : response.json()
|
||
}
|