LoginSignup
1
0

はじめに

 前回はWorkerを作成しました。今回はWorkerから情報を取得してwebページに表示するところまでやります。だいぶ短めになるかも。

フロントエンド

 単純にリクエストを出すだけです。app.vueを以下のように編集して送受信のチェックをしてみました。

<template>
 <div>
   <h1>cloudflare testpage</h1>
   <p>{{ helloWorld }}</p>
   <p>{{ response }}</p>
 </div>
</template>
<script setup lang="ts">
import axios from "axios";

const helloWorld = "Hello World!";

const fetchTest = async () => {
 const response = axios
   .get("https://[Workerのアドレス]/")
   .then((res) => {
     return res.data;
   })
   .catch((err) => {
     console.log(err);
   });

 return response;
};
const response = await fetchTest();
</script>

 今回は、前回生成したWorkerが"Hello Axum"を返してくるのでそれを確認できればOK。
helloaxum.png

 corsの設定は普通にaxumですればいいらしいです。今回はこんな感じにしてみました。

use axum::{http::HeaderValue, routing::get, Router};
use tower_http::cors::CorsLayer;
use tower_service::Service;
use worker::*;

fn router() -> Router {
   Router::new().route("/", get(root)).layer(
       CorsLayer::new()
           .allow_origin(
               "[フロントのOrigin]"
                   .parse::<HeaderValue>()
                   .unwrap(),
           ),
   )
}

#[event(fetch)]
async fn fetch(
   req: HttpRequest,
   _env: Env,
   _ctx: Context,
) -> Result<axum::http::Response<axum::body::Body>> {
   console_error_panic_hook::set_once();
   Ok(router().call(req).await?)
}

pub async fn root() -> &'static str {
   "Hello Axum!"
}

 しかし、試しにcurlやローカルのフロントからリクエストを送ると正常にgetできてしまう......なんでだろう?
 TODOとして継続して調査します。何か手がかりがあればご提供いただけますと嬉しいです!

おわりに

 今回は少し課題が残ってしまいました。こちらについては完成までに解決したいので調査を続けます。
 次回はcloudflare D1を使ってデータベースとの連携周りを作ろうと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0