Nuxt HTTP Client module
- ✅ Using Fetch instead of XHR
- ✅ Built-in adapter for Dedupe, and Priority Queue request.
- ✅ Composable hook for Axios interceptors.
- Nuxt 3
- Add
@privyid/nuapi
dependency to your project
yarn add --dev @privyid/nuapi
- Add
@privyid/nuapi
to themodules
section ofnuxt.config.ts
export default defineNuxtConfig({
modules: [
'@privyid/nuapi'
]
})
That's it! You can now use NuAPI in your Nuxt app ✨
import {
createLazyton,
ApiResponse,
AxiosRequestConfig
} from '@privyid/nuapi'
const useApi = createLazyton({ prefixURL: '/api' })
interface User {
userId: string,
email: string,
name: string
role: string,
}
interface FormUser {
name: string,
email: string,
role: string,
}
function getUserProfile (config?: AxiosRequestConfig): ApiResponse<User> {
return useApi().get('/user/profile', config)
}
function postUserProfile (body: FormUser, config?: AxiosRequestConfig): ApiResponse<User> {
return useApi().post('/user/profile', body, config)
}
There are available hook for add request/response interceptors.
import {
onRequest,
onRequestError,
onResponse,
onResponseError,
onError,
getCode,
getMessage,
} from '@privyid/nuapi/core'
function isUnauthorize (error: Error): boolean {
const code = getCode(error)
const message = getMessage(error)
return code === 401 && message.includes('Unauthorized')
}
/** set additional or custom headers */
onRequest((config) => {
const token: string = cookies.get('session/token') || ''
// check available authorization header
// and set authorization header
if (config.headers && !config.headers.Authorization && token)
config.headers.Authorization = `Bearer ${token}`
return config
})
/**
* check unauthorize error response
* cause of invalid or expired token
*/
onResponseError(async (error) => {
if (isUnauthorize(error)) {
await navigateTo('/login')
}
throw error
})
All request per instance will be add into queue before sent with priority 1
.
If you want to send your request first before the others, you can set using option priority
. The higher priority will run first.
useApi().get('/document/load', {
priority: 2,
})
Sometime, you want to cancel request with same endpoint like when you working with searching or filter.
NuAPI has built in function for this case. Just set requestId
, multiple sent request with same id will cancel last request before.
useApi().get('/document/load', {
requestId: 'document-load',
})
👉 You can learn more about usage in JSDocs Documentation.
- Clone this repository
- Play Nyan Cat in the background (really important!)
- Enable Corepack using
corepack enable
(usenpm i -g corepack
for Node.js < 16.10) - Run
yarn install
- Run
yarn dev:prepare
to generate type stubs. - Use
yarn dev
to start playground in development mode.
MIT License