大家好,欢迎来到IT知识分享网。
fastify
Fastify是一个web框架,高度专注于以最少的开销和强大的插件架构提供最佳的开发体验。它的灵感来自于Hapi和Express,它是运行在Node.js上的最快
的Web框架之一。
Fastify 可以被视为 Node.js 中的一个高效、现代化的 web 框架,是构建快速 web 应用的一个优秀选择。
fastify特点
- 高性能:据我们所知,Fastify 是最快的 web 框架之一,根据代码复杂度,我们可以处理每秒高达
40,000
个请求。 - 可扩展:Fastify 通过其钩子、插件和装饰器完全可扩展。
- 基于模式:虽然不是强制的,但我们建议使用 JSON Schema 来验证你的路由并序列化你的输出,内部的Fastify 将模式编译成一个高性能的函数。
- 日志记录:日志非常重要但成本高昂;我们选择了最佳的日志记录器 Pino 来几乎消除这一成本!
- 开发者友好:这个框架旨在非常表达性,并在不牺牲性能和安全性的情况下,帮助开发者日常使用。
- TypeScript 准备就绪:我们努力维护 TypeScript 类型声明文件
Fastify和其他框架对比
应用场景
- 网关层
- Nest唯二框架之一
- 需要高性能的服务
- 以太坊
基本使用
基本跟express一样
import fastify from "fastify"; const server = fastify(); //post接口 server.post("/", async (request, reply) => {
const {
name, version } = request.body; //返回json 支持直接return return {
name, version } }); //get接口 server.get("/", async (request, reply) => {
reply.send(`${
request.query.name}`); }); server.listen({
port: 3000 }).then(() => console.log("server is running"))
路由
- method 定义请求方式 例如 get post put等
- url 匹配接口路径
- schema 含请求和响应模式的对象。它们需要采用
JSON 架构
格式
- body 验证post接口的参数
- querystring 验证地址栏上面的参数也就是get
- params 验证动态参数
- response 过滤并生成响应的模式,设置模式可以使我们的吞吐量提高 10-20%
- handler 请求处理函数
server.route({
method: "GET", url: "/list", schema: {
querystring: {
type: "object", properties: {
page: {
type: "number" }, pageNo: {
type: "number" } }, required: ["page", "pageNo"], //必填项 }, response: {
200: {
type: "object", //返回一个对象 properties: {
//返回的数属性描述 data: {
//返回data type: "array", //是个数组类型 items: {
//子集 type: "object", //是个对象 properties: {
//子集的属性 name: {
type: "string" }, version: {
type: "string" } } } } } } } }, handler: (request, reply) => {
request.query.page return {
data: [{
name: "fastify", version: "4.27.0" }] } } })
插件编写
与 JavaScript 一样,一切都是对象,在 Fastify 中一切都是插件
Fastify 允许用户通过插件扩展其功能。插件可以是一组路由、服务器装饰器或其他任何东西。您需要使用一个或多个插件的 API 是register
.
fastify.register(plugin, [options])
- app就是fastify实例
- options就是传递过来的传参数
- done控制流程 跟express next一样
server.register(function (app, opts, done) {
app.decorate(opts.name, (a, b) => a + b); const res = app.add(1, 2) console.log(res) done() },{
name:'add' //options })
连接数据库
Fastify 的生态系统提供了一些用于连接各种数据库引擎的插件。
https://fastify.dev/ecosystem/ 大家需要用到什么插件都可以去生态去找
安装包
npm i @fastify/mysql
连接数据库
server.register(import('@fastify/mysql'),{
connectionString: 'mysql://root:@localhost:3306/xiaoman', //账号,密码,IP,端口,库名 })
实现一个简单的增加和查询
import fastify from "fastify"; const server = fastify({
logger: false, }); server.register(import('@fastify/mysql'), {
connectionString: 'mysql://root:@localhost:3306/xiaoma', }) //添加 server.post('/add',(request, reply) => {
server.mysql.query("insert into user(create_time,name,hobby) values(?,?,?)", [new Date(), request.body.name, request.body.hobby], (err, results) => {
if (err) {
console.log(err); return reply.send(err); } reply.send({
results }) }) }) //查询 server.get('/list',(request, reply) => {
server.mysql.query("select * from user", (err, result) => {
reply.send({
result }) }) }) server.listen({
port: 3000 }).then(() => console.log("server is running"))
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129877.html