fastify.com.cn Open in urlscan Pro
2606:4700:3030::ac43:8da5  Public Scan

URL: https://fastify.com.cn/
Submission: On June 14 via api from US — Scanned from DE

Form analysis 0 forms found in the DOM

Text Content

Your Docusaurus site did not load properly.

A very common reason is a wrong site baseUrl configuration.

Current configured baseUrl = / (default value)

We suggest trying baseUrl = /

跳至主要内容

主页文档生态系统基准采用者贡献资源
最新(v4.26.x)
 * 最新(v4.26.x)
 * v4.26.x
 * v4.25.x
 * v4.24.x
 * v4.23.x
 * v4.22.x
 * v4.21.x
 * v4.20.x
 * v4.19.x
 * v4.18.x
 * v4.17.x
 * v4.16.x
 * v4.15.x
 * v4.14.x
 * v4.13.x
 * v4.12.x
 * v4.11.x
 * v4.10.x
 * v4.9.x
 * v4.8.x
 * v4.7.x
 * v4.6.x
 * v4.5.x
 * v4.4.x
 * v4.3.x
 * v4.2.x
 * v4.1.x
 * v4.0.x
 * v3.29.x
 * v2.15.x
 * v1.14.x


⌘K



快速且低开销的 WEB 框架,适用于 NODE.JS

标星   Fork


原因

高效的服务器意味着更低的设施成本、在负载下的更好响应能力和满意的用户。如何有效地处理服务器资源,既能提供尽可能多的请求,又不牺牲安全验证和便捷的开发?

使用 Fastify。Fastify 是一款高度专注于在最低开销下提供最佳开发者体验并拥有强大插件架构的 Web 框架。它受到 Hapi 和 Express
的启发,据我们所知,它是市面上最快的 Web 框架之一。


谁在使用 FASTIFY?

Fastify 自豪地为众多组织和产品提供支持。

发现 更多使用 Fastify 的组织。您想让您的组织 在此处展示 吗?

 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 


核心功能

这些是构建 Fastify 的主要功能和原则

 * 高性能:据我们所知,Fastify 是城中最快的 Web 框架之一,根据代码复杂性,我们可以每秒处理多达 3 万个请求。
 * 可扩展:Fastify 通过其钩子、插件和装饰器完全可扩展。
 * 基于模式:即使不是强制性的,我们也建议使用 JSON 模式 来验证你的路由并序列化你的输出,在内部,Fastify 将模式编译成高性能函数。
 * 日志记录:日志非常重要,但成本很高;我们选择了最好的记录器来几乎消除此成本,Pino!
 * 对开发者友好:该框架旨在非常富有表现力,并在日常使用中帮助开发者,而不会牺牲性能和安全性。
 * TypeScript 准备就绪:我们努力维护 TypeScript 类型声明文件,以便我们可以支持不断增长的 TypeScript 社区。


快速入门

通过 NPM 获取 Fastify

npm install fastify




然后创建 server.js 并添加以下内容

 * ESM
 * CJS

// Import the framework and instantiate it
import Fastify from 'fastify'
const fastify = Fastify({
  logger: true
})

// Declare a route
fastify.get('/', async function handler (request, reply) {
  return { hello: 'world' }
})

// Run the server!
try {
  await fastify.listen({ port: 3000 })
} catch (err) {
  fastify.log.error(err)
  process.exit(1)
}




// Require the framework and instantiate it
const fastify = require('fastify')({ logger: true })

// Declare a route
fastify.get('/', function handler (request, reply) {
  reply.send({ hello: 'world' })
})

// Run the server!
fastify.listen({ port: 3000 }, (err) => {
  if (err) {
    fastify.log.error(err)
    process.exit(1)
  }
})




最后,使用以下命令启动服务器

node server




并使用以下命令对其进行测试

curl http://localhost:3000





使用 CLI

获取 fastify-cli 来创建一个新的脚手架项目

npm install --global fastify-cli
fastify generate myproject


请求/响应验证和钩子

Fastify 的功能远不止这些。例如,你可以轻松地使用 JSON 模式提供输入和输出验证,并在执行处理程序之前执行特定操作

 * ESM
 * CJS

import Fastify from 'fastify'
const fastify = Fastify({
  logger: true
})

fastify.route({
  method: 'GET',
  url: '/',
  schema: {
    // request needs to have a querystring with a `name` parameter
    querystring: {
      type: 'object',
      properties: {
          name: { type: 'string'}
      },
      required: ['name'],
    },
    // the response needs to be an object with an `hello` property of type 'string'
    response: {
      200: {
        type: 'object',
        properties: {
          hello: { type: 'string' }
        }
      }
    }
  },
  // this function is executed for every request before the handler is executed
  preHandler: async (request, reply) => {
    // E.g. check authentication
  },
  handler: async (request, reply) => {
    return { hello: 'world' }
  }
})

try {
  await fastify.listen({ port: 3000 })
} catch (err) {
  fastify.log.error(err)
  process.exit(1)
}




const fastify = require('fastify')({ logger: true })

fastify.route({
  method: 'GET',
  url: '/',
  schema: {
    // request needs to have a querystring with a `name` parameter
    querystring: {
      type: 'object',
      properties: {
          name: { type: 'string'}
      },
      required: ['name'],
    },
    // the response needs to be an object with an `hello` property of type 'string'
    response: {
      200: {
        type: 'object',
        properties: {
          hello: { type: 'string' }
        }
      }
    }
  },
  // this function is executed for every request before the handler is executed
  preHandler: (request, reply, done) => {
    // E.g. check authentication
    done()
  },
  handler: (request, reply) => {
    reply.send({ hello: 'world' })
  }
})

fastify.listen({ port: 3000 }, (err) => {
  if (err) {
    fastify.log.error(err)
    process.exit(1)
  }
})





TYPESCRIPT 支持

Fastify 附带一个类型文件,但你可能需要安装 @types/node,具体取决于你使用的 Node.js 版本。
以下示例创建一个 http 服务器。
我们传递了所用 http 版本的相关类型。通过传递类型,我们可以正确地键入对路由中底层 http 对象的访问。
如果使用 http2,我们将传递 <http2.Http2Server, http2.Http2ServerRequest,
http2.Http2ServerResponse>。
对于 https 传递 http2.Http2SecureServer 或 http.SecureServer 而不是 Server。
这确保在服务器处理程序中,我们还将获得带有 reply.res 上正确类型的 http.ServerResponse。

 * TypeScript

import Fastify, { FastifyInstance, RouteShorthandOptions } from 'fastify'
import { Server, IncomingMessage, ServerResponse } from 'http'

const server: FastifyInstance = Fastify({})

const opts: RouteShorthandOptions = {
  schema: {
    response: {
      200: {
        type: 'object',
        properties: {
          pong: {
            type: 'string'
          }
        }
      }
    }
  }
}

server.get('/ping', opts, async (request, reply) => {
  return { pong: 'it worked!' }
})

const start = async () => {
  try {
    await server.listen({ port: 3000 })

    const address = server.server.address()
    const port = typeof address === 'string' ? address : address?.port

  } catch (err) {
    server.log.error(err)
    process.exit(1)
  }
}

start()




访问 文档 了解更多关于 Fastify 提供的所有功能的信息。


一个快速的 WEB 框架

利用我们在 Node.js 性能方面的经验,Fastify 从头开始构建,以尽可能快。查看我们的 基准测试部分,将 Fastify 性能与其他常见 Web
框架进行比较。

查看我们的基准测试


生态系统

Fastify 拥有不断发展的插件生态系统。可能已经有一个用于你最喜欢的数据库或模板语言的插件。查看 生态系统页面
浏览当前可用的插件。找不到你正在寻找的插件?没问题,编写一个非常容易!

探索 291 个插件


认识团队

按字母顺序排列


主要维护者

Matteo Collina



Tomas Della Vedova



Manuel Spigolon



James Sumners




合作者

Aras Abbasi



Tommaso Allevi



Ayoub El Khattabi



David Clements



Gürgün Dayıoğlu



Dustin Deus



Carlos Fuentes



Rafael Gonzaga



Vincent Le Goff



Luciano Mammino



Salman Mitha



Igor Savin



Evan Shortiss



Maksim Sinik



Frazer Smith




过去合作者

Ethan Arrowood



Çağatay Çalı



Cemre Mengu



Trivikram Kamat



Nathan Woltman




致谢

此项目由以下机构赞助

 * NearForm
 * Platformatic

过去赞助商

 * LetzDoIt
 * Microsoft

还要感谢

 * 令人惊叹的 Fastify 社区


由以下机构托管

我们是 OpenJS Foundation 的大型项目




文档
 * 入门

社区
 * Stack Overflow
 * Discord
 * Twitter

更多
 * GitHub

Fastify,版权所有 © 2016-2024 OpenJS Foundation 和 Fastify 团队,获得 MIT 许可