Kaynağa Gözat

[新增]exception 定义

WuXinyu 7 yıl önce
ebeveyn
işleme
6c9adefea3
2 değiştirilmiş dosya ile 26 ekleme ve 19 silme
  1. 11 0
      src/api/course.js
  2. 15 19
      src/util/request.js

+ 11 - 0
src/api/course.js

@@ -22,6 +22,7 @@ export const getStudentCourses = () => {
  * @param {string} name
  * @param {string} code
  * @returns {Promise<{data:CourseSerializerType}>}
+ * @throws {StatusException} "课程名重复" | "课程选课码重复"
  */
 export const postTeacherCourse = ({ name, code }) => {
   return request(`${COURSE_MODULE}/teacher`, {
@@ -37,6 +38,7 @@ export const postTeacherCourse = ({ name, code }) => {
  * 学生加入课程
  * @param {string} code
  * @returns {Promise<{data:CourseSerializerType}>}
+ * @throws {StatusException} "选课码不存在" | "已经加入课程"
  */
 export const postStudentCourse = code => {
   return request(`${COURSE_MODULE}/student`, {
@@ -46,3 +48,12 @@ export const postStudentCourse = code => {
     }
   });
 };
+
+/**
+ * 获得课程详情
+ * @param courseId
+ * @returns {Promise<{data:CourseSerializerType}>}
+ */
+export const getCourseDetail = courseId => {
+  return request(`${COURSE_MODULE}/course/${courseId}`);
+};

+ 15 - 19
src/util/request.js

@@ -3,30 +3,25 @@ import "whatwg-fetch";
 import router from "@/router";
 import { LOGIN_ROUTER } from "@/router/name";
 
-const codeMessage = {
-  200: "服务器成功返回请求的数据。",
-  201: "新建或修改数据成功。",
-  202: "一个请求已经进入后台排队(异步任务)。",
-  204: "删除数据成功。",
-  400: "发出的请求有错误,服务器没有进行新建或修改数据的操作。",
-  401: "用户没有权限(令牌、用户名、密码错误)。",
-  403: "用户得到授权,但是访问是被禁止的。",
-  404: "发出的请求针对的是不存在的记录,服务器没有进行操作。",
-  406: "请求的格式不可得。",
-  410: "请求的资源被永久删除,且不会再得到的。",
-  422: "当创建一个对象时,发生一个验证错误。",
-  500: "服务器发生错误,请检查服务器。",
-  502: "网关错误。",
-  503: "服务不可用,服务器暂时过载或维护。",
-  504: "网关超时。"
-};
+/**
+ * @description error
+ * @typedef {Object} StatusException
+ * @property {string} name status code
+ * @property {string} message 消息
+ * @property {{code:string,message:string}} response 返回值
+ */
 
+/**
+ * 判断是否抛异常
+ * @param response
+ * @returns {*}
+ * @throws StatusException
+ */
 function checkStatus(response) {
   if (response.status >= 200 && response.status < 300) {
     return response;
   }
-  const errortext = codeMessage[response.status] || response.message;
-  const error = new Error(errortext);
+  const error = new Error(response.message);
   error.name = response.status;
   error.response = response;
   throw error;
@@ -38,6 +33,7 @@ function checkStatus(response) {
  * @param  {string} url       The URL we want to request
  * @param  {{method:string,body}} [options] The options we want to pass to "fetch"
  * @return {Promise<*>}           An object containing either "data" or "err"
+ * @throws StatusException
  */
 export default async function request(url, options) {
   const defaultOptions = {