Created
March 8, 2024 16:38
-
-
Save kaypee90/b4cdd2af75c46c3d90e6b43a262aa805 to your computer and use it in GitHub Desktop.
Node.Js Async Middelware
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// server.js | |
// | |
const responseTime = require('response-time'); | |
const express = require('express') | |
const app = express() | |
app.use(responseTime()) | |
const backgroundAxiosMiddleware = async (req, res, next) => { | |
const startTime = Date.now(); | |
next() | |
res.once('finish', () => { | |
const endTime = Date.now(); | |
const responseTime = endTime - startTime; | |
try { | |
// Express request. | |
console.log('Request BaseUrl:', req.baseUrl); | |
console.log('Request OriginalUrl:', req.originalUrl); | |
console.log('Request Method:', req.method); | |
console.log('Request Hostname:', req.hostname); | |
console.log('Request. IP:', req.ip); | |
console.log('Request. User Agent:', req.get('User-Agent')); | |
// Express response. | |
console.log('Response Status Code:', res.statusCode); | |
console.log('Response Status Message:', res.statusMessage); | |
console.log(`Response time: ${responseTime}ms`); | |
// Create an Axios instance | |
const axios = require('axios'); | |
// Asynchronously make a GET request using Axios in the background | |
const responsePromise = axios.get('https://jsonplaceholder.typicode.com/posts'); | |
// Handle the response when it resolves | |
responsePromise.then(response => { | |
// Process the response as needed | |
console.log('Axios endpoint called successfully') | |
}).catch(error => { | |
// Handle errors | |
console.error('Background Axios error:', error); | |
}); | |
} catch (error) { | |
// Pass any errors to the Express error handling middleware | |
next(error); | |
} | |
}) | |
}; | |
const anotherOnFinishMiddleware = (req, res, next) =>{ | |
next() | |
res.once('finish', () => { | |
console.log("Another Once Finish Call") | |
}) | |
} | |
app.use(anotherOnFinishMiddleware); | |
app.use(backgroundAxiosMiddleware); | |
app.get('/', (req, res) => { | |
console.log("GET localhost:3000/"); | |
res.json({ message: 'Hello, JSON!' }); | |
}); | |
const PORT = 3000; | |
app.listen(PORT, () => { | |
console.log(`Server at http://localhost:${PORT}`); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment