91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Remix寫API接口

發布時間:2023-04-10 16:18:31 來源:億速云 閱讀:103 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么使用Remix寫API接口”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么使用Remix寫API接口”文章能幫助大家解決問題。

接口種類

  • 普通 get/post api:即可滿足基本

  • RESTful API:有規范, 需要協同的

  • graphql:可控制需要的字段的,良好的跨端

其中如果是一些小項目,沒有必要規則化的項目,使用 get/post 處理就已經足夠了,如果項目有了很多的人要維護,并且有了一定的規模,為了方便管理,可以使用 RESTful API 的方式處理。graphql API 手動能力最強。

RESTful API 特點

  • 創建:POST /api/resources

  • 讀取:GET /api/resources/:id

  • 更新:PUT /api/resources/:id

  • 刪除:DELETE /api/resources/:id

其中,:id 表示資源的唯一標識符。

Remix 中如何處理 api 特點

  • loader 處理 get 請求

  • action 處理非 get 請求

Loader 函數處理 Get 請求

export const loader = () => {
  return json({ get: 'loader get' })
}

action 處理非 GET 方法

import { json } from "@remix-run/node";
const handleNotGetRequest = function ({ request }) {
  const method = request.method;
  switch (method) {
    case "POST":
      return json({ code: 0, method: "POST", message: "添加成功" });
    case "PUT":
      return json({ ok: true, code: 1, method: "PUT", message: "修改成功" });
    case "DELETE":
      return json({ ok: true, code: 1, method: "PUT", message: "刪除成功" });
    default:
      break;
  }
};
// 非 get
export const action = ({ request }) => {
  return handleNotGetRequest({ request });
};
//  get
export const loader = ({ request }) => {
  return json({
    a: 1,
  });
};

添加控制層和服務層

為了代碼更加好維護,有結構的代碼時必要的,代碼分層占據重要位置。

如果使用 mongoose 等會定義模型層,定義操作數據的模型,然后使用控制層來操作模型層。構成一個簡單類 MVC 分層結構。當然 Remix 是一個基于 React + Node.js 全棧框架,使用模型層+服務層:

使用 mongoose 定義模型層, category.model.ts

import mongoose from 'mongoose'
const CategorySchema = new mongoose.Schema({
  name: String,
  description: String,
  createdAt: Date,
  articleIds: [String]
})
export default mongoose.models.Category ||
  mongoose.model('Category', CategorySchema)

使用 category.service.ts 定義服務層,提供給 Remix loader 和 action 操作數據使用

// model
import Category from '~/models/category.model'
export const delCategoryById = async (_id: string) => {
  return await Category.remove({ _id })
}
export const findCategoryByName = async (name: string) => {
  return await Category.findOne({ name })
}
export const updateCategoryById = async (_id: string, update: any) => {
  return await Category.findByIdAndUpdate({ _id }, update)
}
export const findCategoryById = async (_id: string) => {
  return await Category.findOne({ _id })
}
export const addCategoryByName = async (name: string) => {
  const CategoryEntify = new Category({ name, createdAt: new Date() })
  return await CategoryEntify.save()
}

暴露 loader 接口

// core
import { json } from '@remix-run/node'
// service
import * as categoryService from '~/services/category.service'
// remix loader
export async function loader() {
  const list = await categoryService
    .getCategoryList({}, '_id createdAt name articleIds', 0, 100000)
    .then((list) => list)
  return json({ code: 0, message: 'success', data: { list } }, 200)
}

在 loader 函數中通過 services 層來獲取數據,然后使用 json 函數返回數據。

使用 action 方法處理文件上傳接口

  • api.upload.files.tsx 上傳文件到本地

import type { ActionArgs } from '@remix-run/node'
import {
  json,
  unstable_composeUploadHandlers as composeUploadHandlers,
  unstable_createFileUploadHandler as createFileUploadHandler,
  unstable_createMemoryUploadHandler as createMemoryUploadHandler,
  unstable_parseMultipartFormData as parseMultipartFormData
} from '@remix-run/node'
// single file upload
export const action = async ({ request }: ActionArgs) => {
  const uploadHandler = composeUploadHandlers(
    createFileUploadHandler({
      directory: 'public/uploads', // 指定上傳目錄
      maxPartSize: 30000000, //  指定大小
      file: (file) => {
        return file.filename
      }
    }),
    createMemoryUploadHandler()
  )
  const formData = await parseMultipartFormData(request, uploadHandler)
  return json({ imgSrc: formData.get('file') }) // 返回文件名
}

上傳使用 post 方法,在 action 函數使用表單方式進行處理。

關于“怎么使用Remix寫API接口”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遵化市| 宣恩县| 广西| 合川市| 富阳市| 孝感市| 安顺市| 安丘市| 宣恩县| 开化县| 昌图县| 鲁甸县| 罗源县| 明星| 南汇区| 青海省| 宝清县| 兴文县| 青铜峡市| 翁源县| 余庆县| 岚皋县| 阿克陶县| 巴林右旗| 罗山县| 沁阳市| 光泽县| 沈丘县| 大同县| 吉木萨尔县| 南宁市| 桑植县| 通州市| 定日县| 偃师市| 乐陵市| 连山| 章丘市| 阿克苏市| 吉安市| 佛坪县|