摘要:前言是目前用的比較多的的路由中間件之一,前段時(shí)間由于作者沒有精力繼續(xù)維護(hù)而將其公開售賣。我們有些項(xiàng)目也用到了這個(gè)庫,但是目前很多我們想要的特性都沒有,比如生成接口文檔。本身這個(gè)庫代碼實(shí)現(xiàn)還比較簡單,因此綜合考慮打算重寫一個(gè)。
前言
koa-router 是目前用的比較多的 Koa 的路由中間件之一,前段時(shí)間由于作者沒有精力繼續(xù)維護(hù)而將其公開售賣。我們有些項(xiàng)目也用到了這個(gè)庫,但是目前很多我們想要的特性都沒有,比如生成接口文檔。本身這個(gè)庫代碼實(shí)現(xiàn)還比較簡單,因此綜合考慮打算重寫一個(gè)。
項(xiàng)目地址:https://github.com/d-band/koa...
特性:支持幾乎所有的 koa-router 特性
支持 params 校驗(yàn)
params 支持從 path, header, query, cookie 中獲取
支持 body parser
支持 request body 校驗(yàn)
支持參數(shù)類型自動(dòng)轉(zhuǎn)換
支持自動(dòng)生成 OpenAPI
簡單例子:index.js
import Koa from "koa"; import Mapper from "koa-mapper"; import * as service from "./service"; const Mapper = new Mapper(); mapper.get("/users/:id/projects", { params: { id: { type: "number" }, status: { type: "array", in: "query" }, token: { type: "string", in: "header" } } }, service.getProjects); mapper.post("/users/:id/projects", { params: { id: { type: "number" } }, body: "Project" }, service.addProject); mapper.schema("Project", { id: { type: "number", required: true }, name: { type: "string", required: true }, status: { type: "array ", required: true } }); mapper.schema("Status", { id: { type: "integer" }, name: { type: "string" } }, { required: ["id", "name"] }); app.use(mapper.routes()); app.use(mapper.allowedMethods()); app.listen(3000); // open http://localhost:3000/openapi.json
service.js
export async function getProjects(ctx) { const { id, status, token } = ctx.params; await checkToken(id, token); ctx.body = await Project.findAll({ where: { userId: id, status: { $in: status } } }); } export async function addProject(ctx) { const { body } = ctx.request; ctx.body = await Project.create({ ...body, userId: id }); }路由定義:
mapper.get(path, [options], ...middlewares); mapper.post(path, [options], ...middlewares); mapper.put(path, [options], ...middlewares); mapper.del(path, [options], ...middlewares); ...
options 為可選參數(shù),包含:
name: 路由名稱
params: 請(qǐng)求參數(shù)定義
body: 請(qǐng)求 Body 定義
其他 OpenAPI 中 Operation Object 的參數(shù)
options.params 為請(qǐng)求參數(shù)定義,如:
params = { id: { type: "number" }, name: { type: "string", in: "query" }, user: { type: "User", in: "query" } }
type: 參數(shù)類型,包含基本類型(number、string、integer、date、time、datetime),數(shù)組類型(array
in: 參數(shù)來源,包含 path,header,query,cookie
其他 OpenAPI 中 Parameter Object 的參數(shù)
自定義類型mapper.define(schemaName, properties, options); // or mapper.schema(schemaName, properties, options);
支持類型組合,如:
mapper.schema("Status", { id: { type: "integer" }, name: { type: "string" } }, { required: ["id"] }); mapper.schema("Project", { id: { type: "number", required: true }, name: { type: "string", required: true }, status: { type: "array", required: true } });
支持繼承,如:
mapper.schema("Model", { id: { type: "number" }, createdAt: { type: "datetime" }, updatedAt: { type: "datetime" } }); mapper.schema("User: Model", { name: { type: "string" } });Body Parser
mapper.post("/users", { body: "User" }, (ctx) => { const { id, name } = ctx.request.body; });
支持文件上傳,如:
mapper.post("/uploadImage", { bodyparser: { multipart: true }, body: { user: { type: "number" }, image: { type: "file" } } }, (ctx) => { const { user, image } = ctx.request.body; });結(jié)尾
目前 koa-mapper 剛發(fā)布,測試覆蓋率達(dá)到 100%,有哪些有興趣的小伙伴歡迎一起維護(hù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109005.html
摘要:于是翻遍與各大網(wǎng)站,都沒找到一個(gè)好用的輕一點(diǎn)的腳手架,也找不到一個(gè)清晰些的搭建介紹。現(xiàn)在把搭建過程介紹下,看能不能方便下入門的同學(xué)。創(chuàng)建一個(gè)文件夾,命名。記得先裝好以上版本一路回車,根據(jù)提示輸入信息。但這只是初步的搭建了下。 前幾天想寫個(gè)小爬蟲程序,準(zhǔn)備后端就用koa2。于是翻遍github與各大網(wǎng)站,都沒找到一個(gè)好用的、輕一點(diǎn)的koa2腳手架,也找不到一個(gè)清晰些的搭建介紹。githu...
摘要:如下圖嗯,如圖都已經(jīng)查詢到我們保存的全部數(shù)據(jù),并且全部返回前端了。如圖沒錯(cuò),什么都沒有就是查詢服務(wù)的界面。寫好了之后我們在配置一下路由,進(jìn)入里面,加入下面幾行代碼。 GraphQL一種用為你 API 而生的查詢語言,2018已經(jīng)到來,PWA還沒有大量投入生產(chǎn)應(yīng)用之中就已經(jīng)火起來了,GraphQL的應(yīng)用或許也不會(huì)太遠(yuǎn)了。前端的發(fā)展的最大一個(gè)特點(diǎn)就是變化快,有時(shí)候應(yīng)對(duì)各種需求場景的變化,不...
摘要:詳細(xì)代碼如下追蹤賦值里面的是子路由設(shè)計(jì)子路由設(shè)計(jì)這個(gè)比較簡單,每個(gè)子路由維護(hù)一個(gè)路由監(jiān)聽列表,然后通過調(diào)用的函數(shù)添加到主路由列表上。 showImg(https://segmentfault.com/img/bVbruD0?w=756&h=378); 前言 鑒于之前使用express和koa的經(jīng)驗(yàn),這兩天想嘗試構(gòu)建出一個(gè)koa精簡版,利用最少的代碼實(shí)現(xiàn)koa和koa-router,同時(shí)...
摘要:使用承諾和異步功能來擺脫回調(diào)地獄的應(yīng)用程序,并簡化錯(cuò)誤處理。它暴露了自己的和對(duì)象,而不是的和對(duì)象。因此,可被視為的模塊的抽象,其中是的應(yīng)用程序框架。這使得中間件對(duì)于整個(gè)堆棧而言不僅僅是最終應(yīng)用程序代碼,而且更易于書寫,并更不容易出錯(cuò)。 Koa 與 Express 此系列文章的應(yīng)用示例已發(fā)布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進(jìn)或 Star 關(guān)注更新...
閱讀 1199·2023-04-25 17:05
閱讀 3024·2021-11-19 09:40
閱讀 3579·2021-11-18 10:02
閱讀 1752·2021-09-23 11:45
閱讀 3035·2021-08-20 09:36
閱讀 2795·2021-08-13 15:07
閱讀 1145·2019-08-30 15:55
閱讀 2476·2019-08-30 14:11