Το Koa είναι ένα ισχυρό και εκφραστικό πλαίσιο ενδιάμεσου λογισμικού HTTP για το Node.js, σχεδιασμένο από τους δημιουργούς του Express.
Βασικός διακομιστής & Μοντέλο κρεμμυδιού (Onion Middleware)
const Koa = require('koa');
const app = new Koa();
// Ενδιάμεσο λογισμικό καταγραφής (διαδοχική εκτέλεση εμπρός και πίσω)
app.use(async (ctx, next) => {
const start = Date.now();
await next(); // Μεταβίβαση ελέγχου στο επόμενο middleware
const ms = Date.now() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
// Ενδιάμεσο λογισμικό απόκρισης
app.use(async (ctx) => {
ctx.body = { message: 'Hello from Koa!' };
});
app.listen(3000, () => console.log('Server running on http://localhost:3000'));
Αναφορά περιβάλλοντος (ctx Reference)
// Έλεγχος εισερχόμενου αιτήματος
ctx.method; // "GET", "POST", etc.
ctx.url; // Full URL path
ctx.query; // Parsed query string object
ctx.headers; // Request headers object
ctx.get('User-Agent'); // Βοηθητική μέθοδος ανάγνωσης κεφαλίδας
// Δόμηση απόκρισης
ctx.status = 200; // Ορισμός κωδικού κατάστασης HTTP
ctx.body = 'Hello'; // Συμβολοσειρά, Buffer, Stream ή αντικείμενο JSON
ctx.set('X-Custom', 'Value'); // Ορισμός προσαρμοσμένης κεφαλίδας
ctx.type = 'json'; // Συντομογραφία τύπου Content-Type
ctx.redirect('/login'); // Αποστολή ανακατεύθυνσης 302
Κεντρική διαχείριση σφαλμάτων
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
ctx.status = err.status || 500;
ctx.body = { error: err.message };
ctx.app.emit('error', err, ctx);
}
});
app.on('error', (err, ctx) => {
console.error('Server error:', err);
});