TWSNMP MV開発4日目:TWSNMP FCと通信する処理をクラスで作ってみた
今朝は助手の猫さんが6時少し前に起こしてくれました。
ご飯をあげた後も甘えたかったようで開発中にまた呼びにきました。撫でていたら、かみさんも起きてきたのでバトンタッチしました。
TWSNMP MVの開発の続きです。今朝はTWSNMP FCと通信する部分を作ることにしました。
2年ぐらい前に作ったPWA
のソースコードを流用しようと思いつきました。
// FileZenへログインする関数
export const login = async (user,password) => {
try {
const res = await fetch('APIURL/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
UserID: user,
Password: password,
})
})
return await res.json();
} catch (e) {
console.log(e);
return undefined;
}
}
関数がいくつかありました。せっかくTypeScriptで開発するのでクラスにしてみようと思いました。
export class TwsnmpAPI {
url: string
token: string
constructor(url: string) {
this.url = url;
this.token = '';
}
async login(user:string,password:string) :Promise<boolean> {
try {
const res = await fetch(this.url + '/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
UserID: user,
Password: password,
})
})
if (res.status == 200) {
const r = await res.json();
console.log(r);
if (r && r.token ) {
this.token = r.token;
return true;
}
}
return false;
} catch (e) {
console.log(e);
return false;
}
}
これを
<script>
import {TwsnmpAPI} from "./lib/twsnmpapi";
import { Alert,Button } from 'flowbite-svelte';
let loginOK = false;
let loginNG = false;
let api = new TwsnmpAPI("http://localhost:8080");
const login = async () => {
loginOK = await api.login("twsnmp","twsnmp");
loginNG = !loginOK;
}
</script>
<div class="p-8">
{#if loginOK}
<Alert color="indigo">ログイン成功</Alert>
{/if}
{#if loginNG}
<Alert>ログイン失敗</Alert>
{/if}
<Button color="blue" on:click={login}>ログイン</Button>
</div>
のようなコードでテストしてみました。
うまくいきました。URL、ユーザー名、パスワードを間違えるとエラーになることも試しました。これで、実際のデータで画面を試していけそうです。
クラスを使って作ると、なんだか高度な開発に見えてきます。
明日に続く
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。