因為 kintone 有開放 Rest API 讓使用者串接,這篇嘗試用 Nuxt3 來取得資料。
眾所皆知,直接發跨域請求會遇到 CORS,瀏覽器會把我們擋下來,所以一開始我們先來處理 CORS,對這個東西有疑惑的可以參考 同源政策(Same Origin Policy)。
先把開發環境裝起來:
npx nuxi@latest init <project-name>
接著使用 Nuxt3 提供的 Nitro 伺服器建立 server API
,之後發送都會先透過這個 server
,由 server
替我們發送 API 再將 response 丟回來給前端,當成 Proxy 的作用。
所以先在根目錄建立 server/api/kintone.ts
,並且寫上:
import { joinURL } from 'ufo'
export default defineEventHandler(async (event) => {
return proxyRequest(event, 'https://test.cybozu.com/k/v1/records.json?app=62', {
fetchOptions: {
credentials: 'include',
headers: {
'x-cybozu-api-token': 'XXXXXXX'
}
}
})
})
token 暫時寫死在這裡,有需要可以放到環境變數。
<script setup lang="ts">
const records = ref<{
$id: { value: string },
公司名稱: { value: string },
公司縣市: { value: string },
單行文字方塊: { value: string },
}[]>([])
const getRecords = async () => {
try {
const response = await $fetch('/api/kintone')
return response.records
} catch(e) {
console.log(e)
}
}
onBeforeMount(async () => {
records.value = await getRecords()
})
</script>
<template>
<ul>
<li v-for="record in records" :key="record[`$id`].value">
<p>{{ record['公司名稱'].value }}</p>
<p>{{ record['公司縣市'].value }}</p>
<p>{{ record['單行文字方塊'].value }}</p>
</li>
</ul>
</template>
剛剛因為都是寫死網址跟 TOKEN,有需要可以將它放在以下:
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
devtools: { enabled: true },
runtimeConfig: {
proxyUrl: process.env.PROXY_URL,
apiToken: process.env.API_TOKEN
}
})
PROXY_URL=
API_TOKEN=