diff options
Diffstat (limited to 'src/server/web')
| -rw-r--r-- | src/server/web/docs.ts | 25 | ||||
| -rw-r--r-- | src/server/web/index.ts | 77 | ||||
| -rw-r--r-- | src/server/web/url-preview.ts | 8 |
3 files changed, 59 insertions, 51 deletions
diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts index 889532e17e..a546d1e88c 100644 --- a/src/server/web/docs.ts +++ b/src/server/web/docs.ts @@ -1,24 +1,21 @@ /** - * Docs Server + * Docs */ import * as path from 'path'; -import * as express from 'express'; +import * as Router from 'koa-router'; +import * as send from 'koa-send'; const docs = path.resolve(`${__dirname}/../../client/docs/`); -/** - * Init app - */ -const app = express(); -app.disable('x-powered-by'); +const router = new Router(); -app.use('/assets', express.static(`${docs}/assets`)); +router.get('/assets', async ctx => { + await send(ctx, `${docs}/assets`); +}); -/** - * Routing - */ -app.get(/^\/([a-z_\-\/]+?)$/, (req, res) => - res.sendFile(`${docs}/${req.params[0]}.html`)); +router.get(/^\/([a-z_\-\/]+?)$/, async ctx => { + await send(ctx, `${docs}/${ctx.params[0]}.html`); +}); -module.exports = app; +module.exports = router; diff --git a/src/server/web/index.ts b/src/server/web/index.ts index 5b1b6409b9..b28ad5592c 100644 --- a/src/server/web/index.ts +++ b/src/server/web/index.ts @@ -5,60 +5,71 @@ import * as path from 'path'; import ms = require('ms'); -// express modules -import * as express from 'express'; -import * as bodyParser from 'body-parser'; -import * as favicon from 'serve-favicon'; -import * as compression from 'compression'; +import * as Koa from 'koa'; +import * as Router from 'koa-router'; +import * as send from 'koa-send'; +import * as favicon from 'koa-favicon'; const client = path.resolve(`${__dirname}/../../client/`); -// Create server -const app = express(); -app.disable('x-powered-by'); +// Init app +const app = new Koa(); -app.use('/docs', require('./docs')); - -app.use(bodyParser.urlencoded({ extended: true })); -app.use(bodyParser.json({ - type: ['application/json', 'text/plain'] -})); -app.use(compression()); +// Serve favicon +app.use(favicon(`${client}/assets/favicon.ico`)); -app.use((req, res, next) => { - res.header('X-Frame-Options', 'DENY'); +// Common request handler +app.use((ctx, next) => { + // IFrameの中に入れられないようにする + ctx.set('X-Frame-Options', 'DENY'); next(); }); +// Init router +const router = new Router(); + //#region static assets -app.use(favicon(`${client}/assets/favicon.ico`)); -app.get('/apple-touch-icon.png', (req, res) => res.sendFile(`${client}/assets/apple-touch-icon.png`)); -app.use('/assets', express.static(`${client}/assets`, { - maxAge: ms('7 days') -})); -app.use('/assets/*.js', (req, res) => res.sendFile(`${client}/assets/404.js`)); -app.use('/assets', (req, res) => { - res.sendStatus(404); +router.get('/assets', async ctx => { + await send(ctx, ctx.path, { + root: `${client}/assets`, + maxage: ms('7 days'), + immutable: true + }); +}); + +// Apple touch icon +router.get('/apple-touch-icon.png', async ctx => { + await send(ctx, `${client}/assets/apple-touch-icon.png`); }); // ServiceWroker -app.get(/^\/sw\.(.+?)\.js$/, (req, res) => - res.sendFile(`${client}/assets/sw.${req.params[0]}.js`)); +router.get(/^\/sw\.(.+?)\.js$/, async ctx => { + await send(ctx, `${client}/assets/sw.${ctx.params[0]}.js`); +}); // Manifest -app.get('/manifest.json', (req, res) => - res.sendFile(`${client}/assets/manifest.json`)); +router.get('/manifest.json', async ctx => { + await send(ctx, `${client}/assets/manifest.json`); +}); //#endregion -app.get(/\/api:url/, require('./url-preview')); +// Docs +router.use('/docs', require('./docs').routes()); + +// URL preview endpoint +router.get('url', require('./url-preview')); // Render base html for all requests -app.get('*', (req, res) => { - res.sendFile(path.resolve(`${client}/app/base.html`), { - maxAge: ms('7 days') +router.get('*', async ctx => { + await send(ctx, `${client}/app/base.html`, { + maxage: ms('7 days'), + immutable: true }); }); +// Register router +app.use(router.routes()); + module.exports = app; diff --git a/src/server/web/url-preview.ts b/src/server/web/url-preview.ts index 0c5fd8a78e..4b3f44a5da 100644 --- a/src/server/web/url-preview.ts +++ b/src/server/web/url-preview.ts @@ -1,11 +1,11 @@ -import * as express from 'express'; +import * as Koa from 'koa'; import summaly from 'summaly'; -module.exports = async (req: express.Request, res: express.Response) => { - const summary = await summaly(req.query.url); +module.exports = async (ctx: Koa.Context) => { + const summary = await summaly(ctx.query.url); summary.icon = wrap(summary.icon); summary.thumbnail = wrap(summary.thumbnail); - res.send(summary); + ctx.body = summary; }; function wrap(url: string): string { |