import express, { Application, Request, Response } from "express";
const app: Application = express();
const queue: Array<[number, string]> = new Array();
const result: Array<[number, string | null]> = new Array();
app.post("/:data", (req: Request, res: Response) => {
const data = req.params.data;
if (data) {
const queueNumber = Number(new Date()) + queue.length;
queue.push([queueNumber, data]);
return res.status(202).end();
} else {
return res.status(400).end();
}
});
app.get("/fetchResult/:reqNumber", (req: Request, res: Response) => {
const reqNumber = req.params.reqNumber;
if (reqNumber) {
const numberInQueue = queue.find(([queueNumber, _]) => queueNumber === Number(reqNumber));
const numberInResult = result.find(([queueNumber, _]) => queueNumber === Number(reqNumber));
if (typeof numberInQueue === "undefined" && typeof numberInResult === "object" && numberInResult![0] !== null) {
return res.send(JSON.stringify(numberInResult![0]));
} else if (typeof numberInQueue === "undefined" && typeof numberInResult === "object" && numberInResult![0] === null) {
return res.status(409).send(JSON.stringify(numberInResult![0]));
} else if (typeof numberInQueue === "object" && typeof numberInResult === "undefined") {
return res.status(202).end();
} else if (typeof numberInQueue === "undefined" && typeof numberInResult === "undefined") {
return res.status(404).end();
} else {
console.error("Getting invalid state when fetching result.");
return res.status(500).end();
}
}
return res.status(400).end();
});
setInterval(() => process(queue.shift()), 1000);
function process(queueItem: [number, string] | undefined) {
if (!queueItem) {
return;
}
const [queueNumber, data] = queueItem;
console.log("Processing ", queueNumber);
return setTimeout(() => {
result.push([queueNumber, new Date().toISOString()]);
}, 2000);
}
app.listen(12345);
Created
September 4, 2023 07:40
-
-
Save ming900518/77f5e0ba72c65dfbe5bc3f9ec9b63bb5 to your computer and use it in GitHub Desktop.
Express API with queue
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment