diff options
Diffstat (limited to 'e2e/web-server/index.js')
-rw-r--r-- | e2e/web-server/index.js | 92 |
1 files changed, 83 insertions, 9 deletions
diff --git a/e2e/web-server/index.js b/e2e/web-server/index.js index 81e11c1..bf60078 100644 --- a/e2e/web-server/index.js +++ b/e2e/web-server/index.js @@ -1,14 +1,88 @@ +'use strict'; + +var serverUrl = require('./url'); var http = require('http'); +var url = require('url'); -const content = -'<!DOCTYPE html>' + -'<html lang="en">' + - '<body style="width:10000px; height:10000px">' + - '</body>' + -'</html">' ; +const handleScroll = (req, res) => { + res.writeHead(200, {'Content-Type': 'text/html'}); + res.end('<!DOCTYPEhtml><html lang="en"><body style="width:10000px; height:10000px"></body></html">'); +}; +const handleAPagenation = (req, res) => { + let u = url.parse(req.url); + let params = new url.URLSearchParams(u.search); + let page = params.get('page') === null ? null : Number(params.get('page')); + if (page === null || isNaN(page)) { + return handle404(req, res); + } + + let body = ''; + let nextLink = u.pathname + '?page=' + (page + 1); + let prevLink = u.pathname + '?page=' + (page - 1); + + if (page > 1) { + body += '<a href="' + prevLink + '">prev</a> | '; + } + body += '<a href="' + nextLink + '">next</a>'; + + res.writeHead(200, {'Content-Type': 'text/html'}); + res.end('<!DOCTYPEhtml><html lang="en"><body">' + body + '</body></html">'); +}; + +const handleLinkPagenation = (req, res) => { + let u = url.parse(req.url); + let params = new url.URLSearchParams(u.search); + let page = params.get('page') === null ? null : Number(params.get('page')); + if (page === null || isNaN(page)) { + return handle404(req, res); + } + + let head = ''; + let nextLink = u.pathname + '?page=' + (page + 1); + let prevLink = u.pathname + '?page=' + (page - 1); + + if (page > 1) { + head += '<link rel="prev" href="' + prevLink + '"></link>'; + } + head += '<link rel="next" href="' + nextLink + '"></link>'; -http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); - res.end(content); -}).listen(11111, '127.0.0.1'); + res.end('<!DOCTYPEhtml><html lang="en"><head>' + head + '</head><body"></body></html">'); +}; + +const handleFollow = (req, res) => { + let body = ''; + body += '<a href="#a">a</a>'; + body += '<a href="#external" target="_blank">external</a>'; + body += '<img width="320" height="240" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" usemap="#map"><map name="map"><area href="#area" shape="rect" coords="15,19,126,104"></map>' + + res.writeHead(200, {'Content-Type': 'text/html'}); + res.end('<!DOCTYPEhtml><html lang="en"><body">' + body + '</body></html">'); +} + +const handle404 = (req, res) => { + res.writeHead(404, {'Content-Type': 'text/plain'}); + res.end('not found') +}; + +http.createServer(function (req, res) { + if (req.method !== 'GET') { + handle404(req, res); + } + + let u = url.parse(req.url); + if (u.pathname === '/scroll') { + handleScroll(req, res); + } else if (u.pathname === '/a-pagenation') { + handleAPagenation(req, res); + } else if (u.pathname === '/link-pagenation') { + handleLinkPagenation(req, res); + } else if (u.pathname === '/follow') { + handleFollow(req, res); + } else { + handle404(req, res); + } + + console.log(`"${req.method} ${req.url}"`, res.statusCode) +}).listen(serverUrl.PORT, serverUrl.HOST); |