👏
Vue3+axiosでlocalサーバにアクセス
Vue3+axiosでlocalサーバにアクセス
はじめに
- Vueは初心者です
- localサーバの構築には触れません
- Windows環境で実装を進めます
環境準備
Node.js install
Node.jsのインストールが必要なのでこちらからインストールしてください。
インストールは確認は、下記になります。versionが出力されればOKです。
node -v
v19.7.0
プロジェクト作成
今回はvue-app
として作成する。
npm init vite@latest vue-app -- --template vue
npm install
vue-appのカレントディレクトリでnpm install
を実行する
Vue.jsを動作させるために必要なリソース群を取得する
npm install
axios install
vue-appのカレントディレクトリでnpm install axios
を実行する
npm install axios
開発サーバを起動確認
vue-appのカレントディレクトリnpm run dev
を実行する
npm run dev
VITE v4.1.4 ready in 370 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
➜ press h to show help
ブラウザでhttp://localhost:5173/
にアクセスして下記のページが表示されればOKです。
localサーバのIF
OpenAI APIで実装した環境を利用する。
エンドポイント
URI
GET http://localhost:8080/api/completions
Parameters
- Header
なし - Body
Name 説明 prompt キーワード - Responses
{ "choices": [ { "text": "人生は楽しくて悲しくてたくさんある。" } ] }
Vue実装
App.vueを変更する
HelloWorld.vue
のimportはそのまま残して、不要な記述を削除する。
<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>
<template>
<HelloWorld msg="Vue3 + axios" />
</template>
HelloWorld.vueを変更する
<script setup>
import axios from "axios";
import { reactive } from "vue";
const url = "http://localhost:8080/api/completions";
defineProps({ ← App.vueからのProps
msg: String,
})
const data = reactive({ ← HelloWorld.vueで利用するreactiveオブジェクト
responses: "",
keyWord: "",
});
const getData = async () => {
let result = await axios.get(url, {params: {prompt: data.keyWord}}); ← サーバサイド呼び出し
data.responses = result.data;
};
</script>
<template>
<h1>{{ msg }}</h1>
<input type="text" v-model="data.keyWord" @input="inputPrompt" />
<button @click="getData">Request</button>
<hr>
<div v-for="(item, index) in data.responses.choices">
{{ item.text }} ← サーバサイドから返却された値を表示する
</div>
</template>
ブラウザで動かしてみる
テキストボックス人生とは?
を入力して、Request
ボタンを押下すると、下記のように結果が表示されます!
その他
CORS 設定が必要だった
サーバサイドにCORS設定が必要だったため、下記のConfigurationクラスを追加した。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:5173/")
.allowedMethods("GET", "POST")
.allowedHeaders("Authorization");
}
}
感想
Vue3とaxiosに初めて触れてみた感想は、純粋に楽しかったです。(フロントの実装が数十年ぶりなので)
コンポーネント設計やデザイン管理(コンポーネントetc..)など、管理面について気になってきました。
管理系もゆる~~~く学んで行きたいので、よさげな記事がありましたらコッソリ教えていただけると嬉しいです。
Discussion