index.js 1.0 KB

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