Το Fastify είναι ένα εξαιρετικά αποδοτικό web framework χαμηλής επιβάρυνσης, εστιασμένο στην κορυφαία εμπειρία προγραμματιστή και τη μέγιστη ταχύτητα.
Ξεκινώντας
Εισαγωγή & Τεκμηρίωση
Το Fastify προσφέρει εξαιρετική απόδοση χάρη στη μεταγλώττιση βάσει σχημάτων και την ισχυρή αρχιτεκτονική πρόσθετων.
- Fastify Source Code (github.com)
- Fastify Documentation (fastify.dev)
Παράδειγμα Hello World
const fastify = require('fastify')()
fastify.get('/', (req, reply) => {
reply.send({ hello: 'world' })
})
fastify.listen(3000, err => {
if (err) throw err
const port = fastify.server.address().port
console.log(`server listening on ${port}`)
})
Δρομολόγηση (Routing)
Δήλωση διαδρομής (Route Declaration)
fastify.route({
method: 'GET',
url: '/',
schema: { ··· },
handler: (req, reply) => { ··· },
beforeHandler: (req, reply, done) => { ··· }
})
Σύντομες μέθοδοι (Shorthand)
fastify.get(path, [options], handler)
fastify.head(path, [options], handler)
fastify.post(path, [options], handler)
fastify.put(path, [options], handler)
fastify.delete(path, [options], handler)
fastify.options(path, [options], handler)
fastify.patch(path, [options], handler)
Χειριστές Async / Await
fastify.get('/', options, async (req, reply) => {
return data
// or
reply.send(data)
})
Σε ασύγχρονους χειριστές, μπορείτε απλά να επιστρέψετε τα δεδομένα ή να καλέσετε το reply.send(data).
Αίτημα και Απάντηση (Request & Reply)
Αντικείμενο Request
request.query
request.body
request.params
request.headers
request.req // Node.js core incoming request
request.log.info('hello')
See: Request.
Αντικείμενο Reply
Κεφαλίδες απόκρισης
reply.code(404)
reply.header('Content-Type', 'text/html')
reply.type('text/html')
Ανακατευθύνσεις (Redirects)
reply.redirect('/foo')
reply.redirect(302, '/foo')
Αποστολή δεδομένων
reply.send(payload)
reply.sent // → true|false
See: Reply.
Επικύρωση σχήματος JSON
Ορισμός σχήματος
const schema = {
querystring: {
name: { type: 'string' },
excitement: { type: 'integer' }
},
response: {
200: {
type: 'object',
properties: {
hello: { type: 'string' }
}
}
}
}
Μεταβίβαση σχήματος στη διαδρομή
fastify.get('/', { schema }, (req, reply) => {
···
})
Αντικείμενο επιλογών διαδρομής
fastify.route({
method: 'GET',
url: '/',
schema,
handler: (req, reply) => { ··· }
})
Ο ορισμός ενός σχήματος JSON επιτρέπει εξαιρετικά γρήγορη επικύρωση και αυτόματη επιτάχυνση σειριοποίησης.
See: Validation and Serialization.
Πρόσθετα (Plugins)
Εγγραφή συνάρτησης ως πρόσθετο
fastify.register(
require('./route'),
err => { if (err) throw err }
)
route.js
module.exports = (fastify, options, next) => {
fastify.get('/', (req, reply) => { ··· })
next()
}
See: Plugins.
Εγγραφή πολλαπλών πρόσθετων
fastify.register([
require('./another-route'),
require('./yet-another-route')
], opts, (err) => {
if (err) throw err
})
Προθέματα διαδρομών (Route Prefixes)
fastify.register(
require('./route'),
{ prefix: '/v1' }
)
Τα προθέματα προστίθενται αυτόματα σε όλες τις διαδρομές που δηλώνονται μέσα στο περιβάλλον του πρόσθετου.
Βοήθημα fastify-plugin
const fp = require('fastify-plugin')
module.exports = fp((fastify, opts, next) => {
fastify.decorate('utility', () => {})
next()
}, '0.x')
Επιτρέπει στα πρόσθετα να παρακάμπτουν την ενθυλάκωση και να μοιράζονται decorators με γονικά περιβάλλοντα.
Ενδιάμεσο λογισμικό & Πρότυπα
Ενσωμάτωση κλασικού middleware
fastify.use(require('cors')())
fastify.use(require('dns-prefetch-control')())
fastify.use(require('frameguard')())
fastify.use(require('hide-powered-by')())
fastify.use(require('hsts')())
fastify.use(require('ienoopen')())
fastify.use(require('x-xss-protection')())