index.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. const RootPage = require('./RootPage');
  2. const AuthorPage = require('./AuthorPage');
  3. const GenrePage = require('./GenrePage');
  4. const BookPage = require('./BookPage');
  5. module.exports = function(app, config) {
  6. const opdsRoot = '/opds';
  7. config.opdsRoot = opdsRoot;
  8. const root = new RootPage(config);
  9. const author = new AuthorPage(config);
  10. const genre = new GenrePage(config);
  11. const book = new BookPage(config);
  12. const routes = [
  13. ['', root],
  14. ['/root', root],
  15. ['/author', author],
  16. ['/genre', genre],
  17. ['/book', book],
  18. ];
  19. const pages = new Map();
  20. for (const r of routes) {
  21. pages.set(`${opdsRoot}${r[0]}`, r[1]);
  22. }
  23. const opds = async(req, res, next) => {
  24. try {
  25. const page = pages.get(req.path);
  26. if (page) {
  27. res.set('Content-Type', 'application/atom+xml; charset=utf-8');
  28. const result = await page.body(req, res);
  29. if (result !== false)
  30. res.send(result);
  31. } else {
  32. next();
  33. }
  34. } catch (e) {
  35. res.status(500).send({error: e.message});
  36. if (config.branch == 'development') {
  37. console.error({error: e.message, url: req.originalUrl});
  38. }
  39. }
  40. };
  41. app.get([opdsRoot, `${opdsRoot}/*`], opds);
  42. };