Serie Fastify: de 0 a 1 práctica ultra detallada que le enseña a usar Fastify para crear una API rápida

¿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.

inserte la descripción de la imagen aquí

Damos la bienvenida a los hermanitos y hermanitas que pasan para presentar mejores opiniones ~~

Supongo que te gusta

Origin blog.csdn.net/tangdou369098655/article/details/131928005
Recomendado
Clasificación