Nodejs 第七十二章(fastify)

Nodejs 第七十二章(fastify)Fastify 是一个 web 框架 高度专注于以最少的开销和强大的插件架构提供最佳的开发体验

大家好,欢迎来到IT知识分享网。

fastify

Fastify是一个web框架,高度专注于以最少的开销和强大的插件架构提供最佳的开发体验。它的灵感来自于Hapi和Express,它是运行在Node.js上的最快的Web框架之一。

Fastify 可以被视为 Node.js 中的一个高效、现代化的 web 框架,是构建快速 web 应用的一个优秀选择。

fastify特点

  1. 高性能:据我们所知,Fastify 是最快的 web 框架之一,根据代码复杂度,我们可以处理每秒高达 40,000 个请求。
  2. 可扩展:Fastify 通过其钩子、插件和装饰器完全可扩展。
  3. 基于模式:虽然不是强制的,但我们建议使用 JSON Schema 来验证你的路由并序列化你的输出,内部的Fastify 将模式编译成一个高性能的函数。
  4. 日志记录:日志非常重要但成本高昂;我们选择了最佳的日志记录器 Pino 来几乎消除这一成本!
  5. 开发者友好:这个框架旨在非常表达性,并在不牺牲性能和安全性的情况下,帮助开发者日常使用。
  6. TypeScript 准备就绪:我们努力维护 TypeScript 类型声明文件
Fastify和其他框架对比

Nodejs 第七十二章(fastify)

应用场景

  1. 网关层
  2. Nest唯二框架之一
  3. 需要高性能的服务
  4. 以太坊

基本使用

基本跟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")) 
路由
  1. method 定义请求方式 例如 get post put等
  2. url 匹配接口路径
  3. schema 含请求和响应模式的对象。它们需要采用JSON 架构格式
  • body 验证post接口的参数
  • querystring 验证地址栏上面的参数也就是get
  • params 验证动态参数
  • response 过滤并生成响应的模式,设置模式可以使我们的吞吐量提高 10-20%
  1. 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]) 
  1. app就是fastify实例
  2. options就是传递过来的传参数
  3. 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

(0)
上一篇 2025-08-20 22:33
下一篇 2025-08-20 22:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信