在這里分享一個(gè)開(kāi)源的http框架,它使用javascript語(yǔ)言,支持使用裝飾器來(lái)創(chuàng)建web服務(wù)基协。
github地址
npm地址
totea
totea是一個(gè)基于express的nodejs框架刷袍,使用裝飾器來(lái)定義路由和中間件。特點(diǎn)概述:
- javascript : 現(xiàn)有的使用裝飾器的框架都默認(rèn)使用typescript妓布,totea可以在javascript中使用姻蚓,只需要引入plugin-proposal-decorators;
- 簡(jiǎn)單高效 : totea提供了不到20個(gè)裝飾器函數(shù)匣沼,卻可以支持多種復(fù)雜使用場(chǎng)景狰挡;
- 易于整合 : totea使用express作為web服務(wù)器,我們沒(méi)有修改任何底層的邏輯释涛,這意味著在express中能使用的方法和插件加叁,也可以在totea中使用。
示例
讓我們來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的用戶(hù)服務(wù)唇撬, 包含user的增刪改查它匕,再創(chuàng)建一個(gè)二級(jí)路由,用于獲取user的tag列表窖认。
const { Server, Get, Post, Delete, Put, Middleware, Controller豫柬,Params } = require('@totea/core')
// 添加一個(gè)二級(jí)路由, 名稱(chēng)為tag
@Controller('tag')
class tagController {
@Get('/list') // GET /tag/list
getTag() {}
}
@Server({
port: 4000, // 把端口設(shè)置為4000
controller: [tagController] // 把上面創(chuàng)建的控制器注入到服務(wù)
})
@Middleware((req, res, next) => { // 添加一個(gè)全局中間件
next()
})
class Service {
@Get('/user') // GET /user
getUser() {}
@Get('/user/:id') // GET /user/${id}
@Middleware((req, res, next) => { // 為/user/${id}添加一個(gè)私有中間件
next()
})
getUserById({ params }) {}
@Post('/user') // POST /user
insertUser({ body }) {}
@Delete('/user/:id') // DELETE /user/${id}
// 添加一個(gè)參數(shù)過(guò)濾器扑浸,req.params.id必須提供且長(zhǎng)度為10
@Params(params => params.id && params.id.length === 10)
deleteUserById({ params }) {}
@Put('/user/:id') // PUT /user/${id}
modifyUserById({ params, body }) {}
}
const service = new Service()
service.start()
這就是全部的代碼了烧给,是不是很簡(jiǎn)單?
詳細(xì)的使用方法喝噪,請(qǐng)查看說(shuō)明文檔
安裝使用
# 安裝 totea
npm i @totea/core
# 安裝并配置babel
npm i @babel/core @babel/node @babel/plugin-proposal-decorators
# 如果你的項(xiàng)目已經(jīng)有babel配置础嫡, 把@babel/plugin-proposal-decorators加到你的配置文件中
# 沒(méi)有的化創(chuàng)建一個(gè)babel.config.js文件,寫(xiě)入以下內(nèi)容
module.exports = {
plugins: [
["@babel/plugin-proposal-decorators", {legacy: true }]
],
};
# 使用babel-node運(yùn)行你的項(xiàng)目
npx babel-node index.js
License
Copyright (c) 2021-present aim-leo