youtube-maze/routes/mazes.mjs

51 lines
1.3 KiB
JavaScript

import express from 'express';
import { exploreVideos, toGraphviz } from '../lib/explore.mjs';
import { toSVG } from '../lib/graphviz.mjs';
const router = express.Router();
export default router;
const statusPending = Symbol('PENDING');
const statusError = Symbol('ERROR');
const cache = Object.create(null);
router.get('/:videoId', async (req, res) => {
const {videoId} = req.params;
if (videoId in cache)
{
if (cache[videoId] === statusPending)
{
res.header('Refresh', '5');
res.send('Exploration in progress… Please wait.');
}
else if (cache[videoId] === statusError)
{
res.status(500).send('Error');
}
else
{
res.send(cache[videoId]);
}
}
else
{
cache[videoId] = statusPending;
res.header('Refresh', '1');
res.send('Exploration in progress… Please wait.');
try
{
const graph = await exploreVideos(req.params.videoId);
const graphviz = toGraphviz(...graph);
const svg = await toSVG(graphviz);
cache[videoId] = svg;
}
catch (err)
{
console.error(err);
cache[videoId] = statusError;
}
}
});