0Pricing
Vue Academy · บทเรียน

การจัดการข้อผิดพลาดและตัวดักจับส่วนกลาง

จัดการข้อผิดพลาดของคำขอและกำหนดค่าตัวดักจับของ Axios

การจัดการข้อผิดพลาดและตัวดักจับส่วนกลาง เป็นบทเรียน Vue Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Vue Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Vue Academy มีบทเรียนทั้งหมด 3 บทเรียน

คำขออาจล้มเหลว

เครือข่ายอาจขาดหาย เซิร์ฟเวอร์อาจส่งข้อผิดพลาด และโทเค็นอาจหมดอายุ แอปที่ทนทานจะเตรียมรับมือกับความล้มเหลวและตอบสนองอย่างเหมาะสม แทนที่จะหยุดทำงานหรือปล่อยให้ผู้ใช้จ้องตัวหมุนตลอดไป

การครอบคำขอด้วยการลองและจับข้อผิดพลาด

ครอบคำขอที่รอผลลัพธ์ไว้ใน try/catch เพื่อจับข้อผิดพลาด Axios จะส่งข้อผิดพลาดเมื่อเซิร์ฟเวอร์ตอบกลับด้วยสถานะ 4xx หรือ 5xx

async fetchPosts() {
  try {
    const res = await api.get("/posts")
    this.posts = res.data
  } catch (err) {
    console.error(err)
  }
}

การตรวจสอบข้อผิดพลาด

ข้อผิดพลาดจาก Axios มีรายละเอียดที่เป็นประโยชน์ error.response จะมีอยู่เมื่อเซิร์ฟเวอร์ตอบกลับมา ส่วนกรณีที่ไม่มีค่านี้มักหมายถึงความล้มเหลวของเครือข่ายหรือหมดเวลา

catch (err) {
  if (err.response) {
    console.log(err.response.status)
    console.log(err.response.data)
  } else {
    console.log("Network error")
  }
}

การติดตามสถานะข้อผิดพลาด

เก็บข้อความข้อผิดพลาดไว้ในสถานะแบบรีแอกทีฟ เพื่อให้แม่แบบแสดงข้อความนั้นแก่ผู้ใช้ได้

data() {
  return { posts: [], loading: false, error: null }
}

การกำหนดข้อผิดพลาด

ล้างข้อผิดพลาดก่อนคำขอแต่ละครั้ง จากนั้นกำหนดข้อความในบล็อกจับข้อผิดพลาด

async fetchPosts() {
  this.loading = true
  this.error = null
  try {
    this.posts = (await api.get("/posts")).data
  } catch (err) {
    this.error = "Could not load posts. Please try again."
  } finally {
    this.loading = false
  }
}

การแสดงข้อความข้อผิดพลาด

แสดงข้อผิดพลาดในแม่แบบ เพื่อให้ผู้ใช้เข้าใจว่าเกิดอะไรขึ้นและควรทำอย่างไรต่อ

<template>
  <p v-if="loading">Loading...</p>
  <p v-else-if="error" class="error">{{ error }}</p>
  <ul v-else>
    <li v-for="p in posts" :key="p.id">{{ p.title }}</li>
  </ul>
</template>

อินเตอร์เซปเตอร์คืออะไร

อินเตอร์เซปเตอร์ของ Axios ช่วยให้คุณเรียกใช้โค้ดกับคำขอหรือการตอบกลับทุกรายการโดยอัตโนมัติ เหมาะอย่างยิ่งสำหรับประเด็นที่ใช้ร่วมกันหลายส่วน เช่น การแนบโทเค็นหรือการจัดการข้อผิดพลาดจากจุดศูนย์กลาง

อินเตอร์เซปเตอร์ของคำขอ

อินเตอร์เซปเตอร์ของคำขอจะทำงานก่อนส่งคำขอแต่ละครั้ง ใช้เพื่อแนบส่วนหัวการยืนยันตัวตนกับทุกคำขอจากส่วนกลาง

api.interceptors.request.use(config => {
  const token = localStorage.getItem("token")
  if (token) {
    config.headers.Authorization = "Bearer " + token
  }
  return config
})

อินเตอร์เซปเตอร์ของการตอบกลับ

อินเตอร์เซปเตอร์ของการตอบกลับจะทำงานหลังจากได้รับการตอบกลับแต่ละครั้ง โดยรับฟังก์ชันเรียกกลับสองรายการ รายการหนึ่งสำหรับความสำเร็จและอีกรายการสำหรับข้อผิดพลาด

api.interceptors.response.use(
  response => response,
  error => {
    if (error.response && error.response.status === 401) {
      // redirect to login
    }
    return Promise.reject(error)
  }
)

การจัดการข้อผิดพลาดจากส่วนกลาง

การรวมตรรกะข้อผิดพลาดไว้ในอินเตอร์เซปเตอร์ของการตอบกลับช่วยให้คอมโพเนนต์แต่ละตัวสะอาดและกระชับ กรณีทั่วไป เช่น 401 (ออกจากระบบ) หรือ 500 (แสดงการแจ้งเตือนแบบโทสต์) จะอยู่ในจุดเดียว

api.interceptors.response.use(
  res => res,
  error => {
    const status = error.response ? error.response.status : null
    if (status === 401) logout()
    if (status >= 500) showToast("Server error, try later")
    return Promise.reject(error)
  }
)

ตรรกะการลองใหม่อย่างง่าย

สำหรับเครือข่ายที่ไม่เสถียร คุณสามารถลองส่งคำขอที่ล้มเหลวใหม่ได้จำนวนครั้งจำกัดก่อนยอมแพ้

async function getWithRetry(url, retries = 2) {
  try {
    return await api.get(url)
  } catch (err) {
    if (retries > 0) {
      return getWithRetry(url, retries - 1)
    }
    throw err
  }
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับการจัดการข้อผิดพลาดและอินเตอร์เซปเตอร์

ทบทวน

ครอบคำขอด้วย try/catch แสดงข้อความ error ที่เป็นมิตรในส่วนติดต่อผู้ใช้ และตรวจสอบ error.response เพื่อแยกความล้มเหลวของเซิร์ฟเวอร์ออกจากความล้มเหลวของเครือข่าย อินเตอร์เซปเตอร์ช่วยรวมประเด็นต่าง ๆ ไว้ที่ส่วนกลาง อินเตอร์เซปเตอร์ของคำขอจะแนบโทเค็น อินเตอร์เซปเตอร์ของการตอบกลับจะจัดการข้อผิดพลาดส่วนกลาง และตัวช่วยลองใหม่ขนาดเล็กจะเพิ่มความทนทาน ต่อไปคุณจะปรับปรุงประสิทธิภาพของแอป

คำถามที่พบบ่อย

บทเรียน “การจัดการข้อผิดพลาดและตัวดักจับส่วนกลาง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดการข้อผิดพลาดและตัวดักจับส่วนกลาง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Vue Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Vue Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดการข้อผิดพลาดและตัวดักจับส่วนกลาง”

จัดการข้อผิดพลาดของคำขอและกำหนดค่าตัวดักจับของ Axios คุณปฏิบัติ Vue Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Vue Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Vue Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน

บทเรียน “การจัดการข้อผิดพลาดและตัวดักจับส่วนกลาง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Vue Academy นี้ได้ไหม

ได้ บทเรียน Vue Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คำขอ HTTP ด้วย Axios
  2. ฮุกวงจรชีวิตและการดึงข้อมูล
  3. การจัดการข้อผิดพลาดและตัวดักจับส่วนกลาง
← กลับไปที่ Vue Academy