Fastify-ը փոքր Node շրջանակ է, որը նախատեսված է հետևի վեբ հավելվածների մշակման համար:

Այս հոդվածում մենք կանդրադառնանք, թե ինչպես ստեղծել հետին պլանային հավելվածներ Fastify-ով:

onSend

Մենք կարող ենք փոխել պատասխանի օգտակար բեռը, որն ուղարկվում է onSend կեռիկով:

Օրինակ՝ կարող ենք գրել.

const fastify = require('fastify')({})
fastify.addHook('onSend', (request, reply, payload, done) => {
  const err = null;
  const newPayload = payload.replace('some-text', 'some-new-text')
  done(err, newPayload)
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

Մենք 'some-text' պատասխանը փոխարինում ենք 'some-new-text'ով:

Այնուհետև, երբ մենք GET հարցում ենք կատարում /-ին, տեսնում ենք, որ 'some-new-text’ վերադարձված է:

Համարժեքորեն, մենք կարող ենք նույնն անել async ֆունկցիայի հետ.

const fastify = require('fastify')({})
fastify.addHook('onSend', async (request, reply, payload) => {
  const newPayload = payload.replace('some-text', 'some-new-text')
  return newPayload
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

Մենք կարող ենք նաև հեռացնել պատասխանի ծանրաբեռնվածությունը հետևյալով.

const fastify = require('fastify')({})
fastify.addHook('onSend', (request, reply, payload, done) => {
  reply.code(304)
  const newPayload = null
  done(null, newPayload)
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

onResponse

onResponse կեռիկը մեզ թույլ է տալիս գործարկել կոդը, երբ պատասխան է ուղարկվում:

Սա օգտակար վայր է վիճակագրություն հավաքելու համար:

Օրինակ՝ կարող ենք գրել.

const fastify = require('fastify')({})
fastify.addHook('onResponse', (request, reply, done) => {  
  console.log(reply)
  done()
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

գրանցել reply-ը:

Կարող ենք նաև գրել.

const fastify = require('fastify')({})
fastify.addHook('onResponse', async (request, reply) => {
  console.log(reply)  
  return
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

նույն բանն անել։

onTimeout

onTimeout կեռիկը մեզ թույլ է տալիս վերահսկել հարցումների ժամանակի ընդհատումները:

Օրինակ, մենք կարող ենք օգտագործել այն գրելով.

const fastify = require('fastify')({})
fastify.addHook('onTimeout', (request, reply, done) => {
  console.log('timed out')
  done()
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

or:

const fastify = require('fastify')({})
fastify.addHook('onTimeout', async (request, reply) => {
  console.log('timed out')
  return
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

ցանկացած հարցման ժամանակի վերջնաժամկետ գրանցելու համար:

Կեռիկներում սխալների կառավարում

Մենք կարող ենք բարձրացնել սխալները կեռիկներում և վերադարձնել սխալի պատասխանները, եթե կան սխալներ:

Օրինակ՝ կարող ենք գրել.

const fastify = require('fastify')({})
fastify.addHook('preHandler', (request, reply, done) => {
  reply.code(400)
  done(new Error('Some error'))
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

ավելացնել preHandler կեռիկը և վերադարձնել 400 սխալ:

Մենք կարող ենք նաև անցնել Error օրինակով done ֆունկցիայի մեջ:

Նաև կարող ենք գրել.

const fastify = require('fastify')({})
fastify.addHook('onResponse', async (request, reply) => {
  throw new Error('Some error')
})
const start = async () => {
  try {
    fastify.get('/', function (request, reply) {
      reply.send('some-text')
    })
    await fastify.listen(3000, '0.0.0.0')  
  } catch (err) {
    fastify.log.error(err)    
    process.exit(1)
  }
}
start()

նույն բանն անել async ֆունկցիաներով:

Եզրակացություն

Մենք կարող ենք ավելացնել տարբեր կեռիկներ Fastify-ի միջոցով իրադարձությունների և սխալների հետ աշխատելու համար: