¿Qué es Fastify?
Fastify es un marco web altamente enfocado en brindar la mejor experiencia de desarrollo posible con una sobrecarga mínima y una poderosa arquitectura de complementos. Se inspiró en Hapi y Express y, hasta donde sabemos, es uno de los marcos web más rápidos que se ejecutan en Node.js.
¿Por qué usar Fastify?
Estas son las principales características y principios de fasttify
-
Alto rendimiento: Hasta donde sabemos, Fastify es uno de los marcos web más rápidos que existen y podemos manejar hasta 30,000 solicitudes por segundo dependiendo de la complejidad del código.
-
Extensible: Fasttify es completamente extensible a través de ganchos, complementos y decoradores.
-
Basado en esquema: incluso si no es obligatorio, recomendamos usar JSON Schema para validar sus rutas y serializar su salida, internamente fasttify compilará el esquema en una función eficaz.
-
Registro: el registro es muy importante, pero costoso; tiene los mejores registradores y no tenemos que agregarlo manualmente nosotros mismos.
-
Desarrollador amigable: el marco es muy expresivo y ayuda a los desarrolladores en su uso diario sin sacrificar el rendimiento y la seguridad.
-
TypeScript: soporte para el creciente TypeScript
Comience rápidamente
Instalar y ejecutar el primer servicio
Primero, cree un nuevo proyecto Fastify con el comando
npm i fastify
crear servidor
Cree un archivo app.js en el directorio raíz del proyecto
// CommonJs
const fastify = require('fastify')({
logger: true
})
// Declare a route
fastify.get('/', function (request, reply) {
reply.send({ hello: 'world' })
})
// Run the server!
fastify.listen({ port: 8081 }, function (err, address) {
if (err) {
fastify.log.error(err)
process.exit(1)
}
console.log(`Server is now listening on ${address}`)
})
El código indica que el puerto de escucha 8081 inicia el servidor
Comienza el servicio
Ejecute el archivo app.js usando el comando de nodo de la siguiente manera:
node app.js
servicio de prueba
Usamos el navegador para abrir http://127.0.0.1:8081/
Ok, hasta ahora tenemos una comprensión preliminar de cómo se construyen y operan los servicios básicos de Fastify, y luego entraremos en la introducción detallada
Usar en detalle
usar asíncrono/esperar
¿Prefiere usar async/await? Fastify lo admite desde el primer momento.
// ESM
import Fastify from 'fastify'
const fastify = Fastify({
logger: true
})
// CommonJs
const fastify = require('fastify')({
logger: true
})
fastify.get('/', async (request, reply) => {
return { hello: 'world' }
})
/**
* Run the server!
*/
const start = async () => {
try {
await fastify.listen({ port: 3000 })
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()
Inicie nuestro primer complemento: enrutamiento
- En JavaScript todo es un objeto, en fasttify todo es un complemento.
- A continuación, vamos a declarar un archivo de enrutamiento, y debemos extraerlo por separado y colocarlo fuera de la entrada.
- Vea el documento de declaración de enrutamiento: https://www.fastify.cn/docs/latest/Reference/Routes/
Crear archivo de enrutamiento
Crear route.js en el directorio raíz
/**
* Encapsulates the routes
* @param {FastifyInstance} fastify Encapsulated Fastify Instance
* @param {Object} options plugin options, refer to https://www.fastify.io/docs/latest/Reference/Plugins/#plugin-options
*/
async function routes (fastify, options) {
fastify.get('/', async (request, reply) => {
return { hello: 'world' }
})
}
module.exports = routes
Registrar archivo de enrutamiento
Modificar app.js
// fastify.get('/', async (request, reply) => {
// return { hello: 'world' }
// })
cambiado a
fastify.register(require('./route'))
Iniciar y probar el servicio
Utilice el comando de nodo para ejecutar
node app.js
Usamos el navegador para abrir http://127.0.0.1:8081/
Hasta ahora, nuestra ruta ha sido creada, ¿es muy simple? Puede observar que Fasttify proporciona async await para implementar llamadas de interfaz. Esto es muy importante, porque cuando nos conectamos a la base de datos, debemos asegurarnos de que la base de datos esté disponible antes de que podamos leer los datos. En este momento, necesitamos usar async , probemos juntos
Conectividad de base de datos
Tomemos la base de datos postgres como ejemplo.
condiciones previas
Necesitamos una URL de db La base de datos db creada se puede usar ~~
instalar dependencias
npm i fastify-plugin
npm i pg @fastify/postgres
Documentos relacionados
https://www.npmjs.com/package/@fastify/postgres
https://www.fastify.cn/docs/latest/Guides/Getting-Started/
escribir un complemento
Cree postgres-connector.js en el directorio raíz
/**
* @type {import('fastify-plugin').FastifyPlugin}
*/
const fastifyPlugin = require('fastify-plugin')
/**
* Connects to a postgres database
* @param {FastifyInstance} fastify Encapsulated Fastify Instance
* @param {Object} options plugin options, refer to https://www.fastify.io/docs/latest/Reference/Plugins/#plugin-options
*/
async function dbConnector (fastify, options) {
fastify.register(require('@fastify/postgres'), {
connectionString: 'postgresql://名字:密码@数据库服务器名:端口号/数据库名'
})
}
// Wrapping a plugin function with fastify-plugin exposes the decorators
// and hooks, declared inside the plugin to the parent scope.
module.exports = fastifyPlugin(dbConnector)
Complemento de registro
Abra app.js para registrar el complemento que escribimos
fastify.register(require('./postgres-connector'))
Agregar interfaz de prueba
Abra route.js, agregue el código de interfaz de prueba
/**
* Encapsulates the routes
* @param {FastifyInstance} fastify Encapsulated Fastify Instance
* @param {Object} options plugin options, refer to https://www.fastify.io/docs/latest/Reference/Plugins/#plugin-options
*/
async function routes(fastify, options) {
fastify.get("/", async (request, reply) => {
return { hello: "world" };
});
fastify.get("/test", async (req, reply) => {
const client = await fastify.pg.connect();
try {
const { rows } = await client.query("SELECT id, name FROM tests");
// Note: avoid doing expensive computation here, this will block releasing the client
return rows;
} finally {
// Release the client immediately after query resolves, or upon error
client.release();
}
});
}
module.exports = routes;
Iniciar prueba de servicio
node app.js
Información de la base de datos obtenida con éxito
Resumir
-
Como puede ver en la figura anterior, usamos el registro tanto para el conector de la base de datos como para el registro de la ruta.
-
Esta es una de las mejores características de Fastify, carga complementos en el orden en que los declara y solo carga el siguiente complemento después de cargar el complemento actual.
-
De esta manera podemos registrar el conector de la base de datos en el primer complemento y usarlo en el segundo complemento
-
Lea aquí para saber cómo manejar el alcance del complemento: https://www.fastify.cn/docs/latest/Reference/Plugins/#handle-the-scope
-
La carga del complemento comienza cuando llama a fastify.listen() , fastify.inject() o fastify .
-
El complemento de postgres utiliza la API de decorador para agregar objetos personalizados a la instancia de fasttify, la documentación oficial recomienda el uso de dicha API para simplificar la reutilización del código y reducir la duplicación de código o lógica.
-
Para ver en profundidad cómo funcionan los complementos de Fasttify, cómo desarrollar nuevos complementos y los detalles sobre cómo usar toda la API de Fasttify para manejar las complejidades del lanzamiento de aplicaciones de forma asíncrona, lea la guía de complementos .
-
Voy a escribir aquí hoy ~
-
Amigos, ( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ Hasta mañana~~
-
Todos sean felices todos los días
Todos son bienvenidos a señalar dónde se debe corregir el artículo ~
El aprendizaje es interminable, la cooperación es beneficiosa para todos.