fatsify核心功能示例测试!!!
This commit is contained in:
421
node_modules/fastify/README.md
generated
vendored
Normal file
421
node_modules/fastify/README.md
generated
vendored
Normal file
@@ -0,0 +1,421 @@
|
||||
<div align="center"> <a href="https://fastify.dev/">
|
||||
<img
|
||||
src="https://github.com/fastify/graphics/raw/HEAD/fastify-landscape-outlined.svg"
|
||||
width="650"
|
||||
height="auto"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[](https://github.com/fastify/fastify/actions/workflows/ci.yml)
|
||||
[](https://github.com/fastify/fastify/actions/workflows/package-manager-ci.yml)
|
||||
[](https://github.com/fastify/fastify/actions/workflows/website.yml)
|
||||
[](https://github.com/neostandard/neostandard)
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/7585)
|
||||
|
||||
</div>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[](https://www.npmjs.com/package/fastify)
|
||||
[](https://www.npmjs.com/package/fastify)
|
||||
[](https://github.com/fastify/fastify/blob/main/SECURITY.md)
|
||||
[](https://discord.gg/fastify)
|
||||
[](https://gitpod.io/#https://github.com/fastify/fastify)
|
||||
[](https://github.com/sponsors/fastify#sponsors)
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
An efficient server implies a lower cost of the infrastructure, better
|
||||
responsiveness under load, and happy users. How can you efficiently handle the
|
||||
resources of your server, knowing that you are serving the highest number of
|
||||
requests possible, without sacrificing security validations and handy
|
||||
development?
|
||||
|
||||
Enter Fastify. Fastify is a web framework highly focused on providing the best
|
||||
developer experience with the least overhead and a powerful plugin architecture.
|
||||
It is inspired by Hapi and Express and as far as we know, it is one of the
|
||||
fastest web frameworks in town.
|
||||
|
||||
The `main` branch refers to the Fastify `v5` release.
|
||||
Check out the [`4.x` branch](https://github.com/fastify/fastify/tree/4.x) for `v4`.
|
||||
|
||||
### Table of Contents
|
||||
|
||||
- [Quick start](#quick-start)
|
||||
- [Install](#install)
|
||||
- [Example](#example)
|
||||
- [Core features](#core-features)
|
||||
- [Benchmarks](#benchmarks)
|
||||
- [Documentation](#documentation)
|
||||
- [Ecosystem](#ecosystem)
|
||||
- [Support](#support)
|
||||
- [Team](#team)
|
||||
- [Hosted by](#hosted-by)
|
||||
- [License](#license)
|
||||
|
||||
|
||||
### Quick start
|
||||
|
||||
Create a folder and make it your current working directory:
|
||||
|
||||
```sh
|
||||
mkdir my-app
|
||||
cd my-app
|
||||
```
|
||||
|
||||
Generate a fastify project with `npm init`:
|
||||
|
||||
```sh
|
||||
npm init fastify
|
||||
```
|
||||
|
||||
Install dependencies:
|
||||
|
||||
```sh
|
||||
npm i
|
||||
```
|
||||
|
||||
To start the app in dev mode:
|
||||
|
||||
```sh
|
||||
npm run dev
|
||||
```
|
||||
|
||||
For production mode:
|
||||
|
||||
```sh
|
||||
npm start
|
||||
```
|
||||
|
||||
Under the hood `npm init` downloads and runs [Fastify
|
||||
Create](https://github.com/fastify/create-fastify), which in turn uses the
|
||||
generate functionality of [Fastify CLI](https://github.com/fastify/fastify-cli).
|
||||
|
||||
|
||||
### Install
|
||||
|
||||
To install Fastify in an existing project as a dependency:
|
||||
|
||||
```sh
|
||||
npm i fastify
|
||||
```
|
||||
|
||||
### Example
|
||||
|
||||
```js
|
||||
// Require the framework and instantiate it
|
||||
|
||||
// ESM
|
||||
import Fastify from 'fastify'
|
||||
|
||||
const fastify = Fastify({
|
||||
logger: true
|
||||
})
|
||||
// CommonJs
|
||||
const fastify = require('fastify')({
|
||||
logger: true
|
||||
})
|
||||
|
||||
// Declare a route
|
||||
fastify.get('/', (request, reply) => {
|
||||
reply.send({ hello: 'world' })
|
||||
})
|
||||
|
||||
// Run the server!
|
||||
fastify.listen({ port: 3000 }, (err, address) => {
|
||||
if (err) throw err
|
||||
// Server is now listening on ${address}
|
||||
})
|
||||
```
|
||||
|
||||
With async-await:
|
||||
|
||||
```js
|
||||
// ESM
|
||||
import Fastify from 'fastify'
|
||||
|
||||
const fastify = Fastify({
|
||||
logger: true
|
||||
})
|
||||
// CommonJs
|
||||
const fastify = require('fastify')({
|
||||
logger: true
|
||||
})
|
||||
|
||||
fastify.get('/', async (request, reply) => {
|
||||
reply.type('application/json').code(200)
|
||||
return { hello: 'world' }
|
||||
})
|
||||
|
||||
fastify.listen({ port: 3000 }, (err, address) => {
|
||||
if (err) throw err
|
||||
// Server is now listening on ${address}
|
||||
})
|
||||
```
|
||||
|
||||
Do you want to know more? Head to the <a
|
||||
href="./docs/Guides/Getting-Started.md"><code><b>Getting Started</b></code></a>.
|
||||
If you learn best by reading code, explore the official [demo](https://github.com/fastify/demo).
|
||||
|
||||
> ## Note
|
||||
> `.listen` binds to the local host, `localhost`, interface by default
|
||||
> (`127.0.0.1` or `::1`, depending on the operating system configuration). If
|
||||
> you are running Fastify in a container (Docker,
|
||||
> [GCP](https://cloud.google.com/), etc.), you may need to bind to `0.0.0.0`. Be
|
||||
> careful when listening on all interfaces; it comes with inherent
|
||||
> [security
|
||||
> risks](https://web.archive.org/web/20170711105010/https://snyk.io/blog/mongodb-hack-and-secure-defaults/).
|
||||
> See [the documentation](./docs/Reference/Server.md#listen) for more
|
||||
> information.
|
||||
|
||||
### Core features
|
||||
|
||||
- **Highly performant:** as far as we know, Fastify is one of the fastest web
|
||||
frameworks in town, depending on the code complexity we can serve up to 76+
|
||||
thousand requests per second.
|
||||
- **Extensible:** Fastify is fully extensible via its hooks, plugins, and
|
||||
decorators.
|
||||
- **Schema-based:** even if it is not mandatory we recommend using [JSON
|
||||
Schema](https://json-schema.org/) to validate your routes and serialize your
|
||||
outputs. Internally Fastify compiles the schema in a highly performant
|
||||
function.
|
||||
- **Logging:** logs are extremely important but are costly; we chose the best
|
||||
logger to almost remove this cost, [Pino](https://github.com/pinojs/pino)!
|
||||
- **Developer friendly:** the framework is built to be very expressive and help
|
||||
developers in their daily use without sacrificing performance and
|
||||
security.
|
||||
|
||||
### Benchmarks
|
||||
|
||||
__Machine:__ EX41S-SSD, Intel Core i7, 4Ghz, 64GB RAM, 4C/8T, SSD.
|
||||
|
||||
__Method:__: `autocannon -c 100 -d 40 -p 10 localhost:3000` * 2, taking the
|
||||
second average
|
||||
|
||||
| Framework | Version | Router? | Requests/sec |
|
||||
| :----------------- | :------------------------- | :----------: | ------------: |
|
||||
| Express | 4.17.3 | ✓ | 14,200 |
|
||||
| hapi | 20.2.1 | ✓ | 42,284 |
|
||||
| Restify | 8.6.1 | ✓ | 50,363 |
|
||||
| Koa | 2.13.0 | ✗ | 54,272 |
|
||||
| **Fastify** | **4.0.0** | **✓** | **77,193** |
|
||||
| - | | | |
|
||||
| `http.Server` | 16.14.2 | ✗ | 74,513 |
|
||||
|
||||
These benchmarks taken using https://github.com/fastify/benchmarks. This is a
|
||||
synthetic "hello world" benchmark that aims to evaluate the framework overhead.
|
||||
The overhead that each framework has on your application depends on your
|
||||
application. You should __always__ benchmark if performance matters to you.
|
||||
|
||||
## Documentation
|
||||
* [__`Getting Started`__](./docs/Guides/Getting-Started.md)
|
||||
* [__`Guides`__](./docs/Guides/Index.md)
|
||||
* [__`Server`__](./docs/Reference/Server.md)
|
||||
* [__`Routes`__](./docs/Reference/Routes.md)
|
||||
* [__`Encapsulation`__](./docs/Reference/Encapsulation.md)
|
||||
* [__`Logging`__](./docs/Reference/Logging.md)
|
||||
* [__`Middleware`__](./docs/Reference/Middleware.md)
|
||||
* [__`Hooks`__](./docs/Reference/Hooks.md)
|
||||
* [__`Decorators`__](./docs/Reference/Decorators.md)
|
||||
* [__`Validation and Serialization`__](./docs/Reference/Validation-and-Serialization.md)
|
||||
* [__`Fluent Schema`__](./docs/Guides/Fluent-Schema.md)
|
||||
* [__`Lifecycle`__](./docs/Reference/Lifecycle.md)
|
||||
* [__`Reply`__](./docs/Reference/Reply.md)
|
||||
* [__`Request`__](./docs/Reference/Request.md)
|
||||
* [__`Errors`__](./docs/Reference/Errors.md)
|
||||
* [__`Content Type Parser`__](./docs/Reference/ContentTypeParser.md)
|
||||
* [__`Plugins`__](./docs/Reference/Plugins.md)
|
||||
* [__`Testing`__](./docs/Guides/Testing.md)
|
||||
* [__`Benchmarking`__](./docs/Guides/Benchmarking.md)
|
||||
* [__`How to write a good plugin`__](./docs/Guides/Write-Plugin.md)
|
||||
* [__`Plugins Guide`__](./docs/Guides/Plugins-Guide.md)
|
||||
* [__`HTTP2`__](./docs/Reference/HTTP2.md)
|
||||
* [__`Long Term Support`__](./docs/Reference/LTS.md)
|
||||
* [__`TypeScript and types support`__](./docs/Reference/TypeScript.md)
|
||||
* [__`Serverless`__](./docs/Guides/Serverless.md)
|
||||
* [__`Recommendations`__](./docs/Guides/Recommendations.md)
|
||||
|
||||
## Ecosystem
|
||||
|
||||
- [Core](./docs/Guides/Ecosystem.md#core) - Core plugins maintained by the
|
||||
_Fastify_ [team](#team).
|
||||
- [Community](./docs/Guides/Ecosystem.md#community) - Community-supported
|
||||
plugins.
|
||||
- [Live Examples](https://github.com/fastify/example) - Multirepo with a broad
|
||||
set of real working examples.
|
||||
- [Discord](https://discord.gg/D3FZYPy) - Join our discord server and chat with
|
||||
the maintainers.
|
||||
|
||||
## Support
|
||||
Please visit [Fastify help](https://github.com/fastify/help) to view prior
|
||||
support issues and to ask new support questions.
|
||||
|
||||
Version 3 of Fastify and lower are EOL and will not receive any security or bug fixes.
|
||||
|
||||
Fastify's partner, HeroDevs, provides commercial security fixes for all
|
||||
unsupported versions at [https://herodevs.com/support/fastify-nes][hd-link].
|
||||
Fastify's supported version matrix is available in the
|
||||
[Long Term Support][lts-link] documentation.
|
||||
|
||||
## Contributing
|
||||
|
||||
Whether reporting bugs, discussing improvements and new ideas, or writing code,
|
||||
we welcome contributions from anyone and everyone. Please read the [CONTRIBUTING](./CONTRIBUTING.md)
|
||||
guidelines before submitting pull requests.
|
||||
|
||||
## Team
|
||||
|
||||
_Fastify_ is the result of the work of a great community. Team members are
|
||||
listed in alphabetical order.
|
||||
|
||||
**Lead Maintainers:**
|
||||
* [__Matteo Collina__](https://github.com/mcollina),
|
||||
<https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>
|
||||
* [__Tomas Della Vedova__](https://github.com/delvedor),
|
||||
<https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor>
|
||||
* [__KaKa Ng__](https://github.com/climba03003),
|
||||
<https://www.npmjs.com/~climba03003>
|
||||
* [__Manuel Spigolon__](https://github.com/eomm),
|
||||
<https://twitter.com/manueomm>, <https://www.npmjs.com/~eomm>
|
||||
* [__James Sumners__](https://github.com/jsumners),
|
||||
<https://twitter.com/jsumners79>, <https://www.npmjs.com/~jsumners>
|
||||
|
||||
### Fastify Core team
|
||||
* [__Aras Abbasi__](https://github.com/uzlopak),
|
||||
<https://www.npmjs.com/~uzlopak>
|
||||
* [__Harry Brundage__](https://github.com/airhorns/),
|
||||
<https://twitter.com/harrybrundage>, <https://www.npmjs.com/~airhorns>
|
||||
* [__Matteo Collina__](https://github.com/mcollina),
|
||||
<https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>
|
||||
* [__Gürgün Dayıoğlu__](https://github.com/gurgunday),
|
||||
<https://www.npmjs.com/~gurgunday>
|
||||
* [__Tomas Della Vedova__](https://github.com/delvedor),
|
||||
<https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor>
|
||||
* [__Carlos Fuentes__](https://github.com/metcoder95),
|
||||
<https://twitter.com/metcoder95>, <https://www.npmjs.com/~metcoder95>
|
||||
* [__Vincent Le Goff__](https://github.com/zekth)
|
||||
* [__Luciano Mammino__](https://github.com/lmammino),
|
||||
<https://twitter.com/loige>, <https://www.npmjs.com/~lmammino>
|
||||
* [__Jean Michelet__](https://github.com/jean-michelet),
|
||||
<https://www.npmjs.com/~jean-michelet>
|
||||
* [__KaKa Ng__](https://github.com/climba03003),
|
||||
<https://www.npmjs.com/~climba03003>
|
||||
* [__Luis Orbaiceta__](https://github.com/luisorbaiceta),
|
||||
<https://twitter.com/luisorbai>, <https://www.npmjs.com/~luisorbaiceta>
|
||||
* [__Maksim Sinik__](https://github.com/fox1t),
|
||||
<https://twitter.com/maksimsinik>, <https://www.npmjs.com/~fox1t>
|
||||
* [__Manuel Spigolon__](https://github.com/eomm),
|
||||
<https://twitter.com/manueomm>, <https://www.npmjs.com/~eomm>
|
||||
* [__James Sumners__](https://github.com/jsumners),
|
||||
<https://twitter.com/jsumners79>, <https://www.npmjs.com/~jsumners>
|
||||
|
||||
### Fastify Plugins team
|
||||
* [__Harry Brundage__](https://github.com/airhorns/),
|
||||
<https://twitter.com/harrybrundage>, <https://www.npmjs.com/~airhorns>
|
||||
* [__Simone Busoli__](https://github.com/simoneb),
|
||||
<https://twitter.com/simonebu>, <https://www.npmjs.com/~simoneb>
|
||||
* [__Dan Castillo__](https://github.com/dancastillo),
|
||||
<https://www.npmjs.com/~dancastillo>
|
||||
* [__Matteo Collina__](https://github.com/mcollina),
|
||||
<https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>
|
||||
* [__Gürgün Dayıoğlu__](https://github.com/gurgunday),
|
||||
<https://www.npmjs.com/~gurgunday>
|
||||
* [__Tomas Della Vedova__](https://github.com/delvedor),
|
||||
<https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor>
|
||||
* [__Carlos Fuentes__](https://github.com/metcoder95),
|
||||
<https://twitter.com/metcoder95>, <https://www.npmjs.com/~metcoder95>
|
||||
* [__Vincent Le Goff__](https://github.com/zekth)
|
||||
* [__Jean Michelet__](https://github.com/jean-michelet),
|
||||
<https://www.npmjs.com/~jean-michelet>
|
||||
* [__KaKa Ng__](https://github.com/climba03003),
|
||||
<https://www.npmjs.com/~climba03003>
|
||||
* [__Maksim Sinik__](https://github.com/fox1t),
|
||||
<https://twitter.com/maksimsinik>, <https://www.npmjs.com/~fox1t>
|
||||
* [__Frazer Smith__](https://github.com/Fdawgs), <https://www.npmjs.com/~fdawgs>
|
||||
* [__Manuel Spigolon__](https://github.com/eomm),
|
||||
<https://twitter.com/manueomm>, <https://www.npmjs.com/~eomm>
|
||||
|
||||
### Emeritus Contributors
|
||||
Great contributors to a specific area of the Fastify ecosystem will be invited
|
||||
to join this group by Lead Maintainers when they decide to step down from the
|
||||
active contributor's group.
|
||||
|
||||
* [__Tommaso Allevi__](https://github.com/allevo),
|
||||
<https://twitter.com/allevitommaso>, <https://www.npmjs.com/~allevo>
|
||||
* [__Ethan Arrowood__](https://github.com/Ethan-Arrowood/),
|
||||
<https://twitter.com/arrowoodtech>, <https://www.npmjs.com/~ethan_arrowood>
|
||||
* [__Çağatay Çalı__](https://github.com/cagataycali),
|
||||
<https://twitter.com/cagataycali>, <https://www.npmjs.com/~cagataycali>
|
||||
* [__David Mark Clements__](https://github.com/davidmarkclements),
|
||||
<https://twitter.com/davidmarkclem>,
|
||||
<https://www.npmjs.com/~davidmarkclements>
|
||||
* [__dalisoft__](https://github.com/dalisoft), <https://twitter.com/dalisoft>,
|
||||
<https://www.npmjs.com/~dalisoft>
|
||||
* [__Dustin Deus__](https://github.com/StarpTech),
|
||||
<https://twitter.com/dustindeus>, <https://www.npmjs.com/~starptech>
|
||||
* [__Denis Fäcke__](https://github.com/SerayaEryn),
|
||||
<https://twitter.com/serayaeryn>, <https://www.npmjs.com/~serayaeryn>
|
||||
* [__Rafael Gonzaga__](https://github.com/rafaelgss),
|
||||
<https://twitter.com/_rafaelgss>, <https://www.npmjs.com/~rafaelgss>
|
||||
* [__Trivikram Kamat__](https://github.com/trivikr),
|
||||
<https://twitter.com/trivikram>, <https://www.npmjs.com/~trivikr>
|
||||
* [__Ayoub El Khattabi__](https://github.com/AyoubElk),
|
||||
<https://twitter.com/ayoubelkh>, <https://www.npmjs.com/~ayoubelk>
|
||||
* [__Cemre Mengu__](https://github.com/cemremengu),
|
||||
<https://twitter.com/cemremengu>, <https://www.npmjs.com/~cemremengu>
|
||||
* [__Salman Mitha__](https://github.com/salmanm),
|
||||
<https://www.npmjs.com/~salmanm>
|
||||
* [__Nathan Woltman__](https://github.com/nwoltman),
|
||||
<https://twitter.com/NathanWoltman>, <https://www.npmjs.com/~nwoltman>
|
||||
|
||||
## Hosted by
|
||||
|
||||
[<img
|
||||
src="https://github.com/openjs-foundation/artwork/blob/main/openjs_foundation/openjs_foundation-logo-horizontal-color.png?raw=true"
|
||||
width="250px;"/>](https://openjsf.org/projects)
|
||||
|
||||
We are an [At-Large
|
||||
Project](https://github.com/openjs-foundation/cross-project-council/blob/HEAD/PROJECT_PROGRESSION.md#at-large-projects)
|
||||
in the [OpenJS Foundation](https://openjsf.org/).
|
||||
|
||||
## Sponsors
|
||||
|
||||
Support this project by becoming a [SPONSOR](./SPONSORS.md)!
|
||||
Fastify has an [Open Collective](https://opencollective.com/fastify)
|
||||
page where we accept and manage financial contributions.
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
This project is kindly sponsored by:
|
||||
- [NearForm](https://nearform.com)
|
||||
- [Platformatic](https://platformatic.dev)
|
||||
|
||||
Past Sponsors:
|
||||
- [LetzDoIt](https://www.letzdoitapp.com/)
|
||||
|
||||
This list includes all companies that support one or more team members
|
||||
in maintaining this project.
|
||||
|
||||
## License
|
||||
|
||||
Licensed under [MIT](./LICENSE).
|
||||
|
||||
For your convenience, here is a list of all the licenses of our production
|
||||
dependencies:
|
||||
- MIT
|
||||
- ISC
|
||||
- BSD-3-Clause
|
||||
- BSD-2-Clause
|
||||
|
||||
[hd-link]: https://www.herodevs.com/support/fastify-nes?utm_source=fastify&utm_medium=link&utm_campaign=github_readme
|
||||
[lts-link]: https://fastify.dev/docs/latest/Reference/LTS/
|
||||
Reference in New Issue
Block a user