fetch/test/server.js

136 строки
3.4 KiB
JavaScript

/* eslint-env node */
const url = require('url')
const querystring = require('querystring')
const routes = {
'/request': function(res, req) {
res.writeHead(200, {'Content-Type': 'application/json'})
var data = ''
req.on('data', function(c) {
data += c
})
req.on('end', function() {
res.end(
JSON.stringify({
method: req.method,
url: req.url,
headers: req.headers,
data: data
})
)
})
},
'/hello': function(res, req) {
res.writeHead(200, {
'Content-Type': 'text/plain',
'X-Request-URL': 'http://' + req.headers.host + req.url
})
res.end('hi')
},
'/hello/utf8': function(res) {
res.writeHead(200, {
'Content-Type': 'text/plain; charset=utf-8'
})
// "hello"
var buf = Buffer.from([104, 101, 108, 108, 111])
res.end(buf)
},
'/hello/utf16le': function(res) {
res.writeHead(200, {
'Content-Type': 'text/plain; charset=utf-16le'
})
// "hello"
var buf = Buffer.from([104, 0, 101, 0, 108, 0, 108, 0, 111, 0])
res.end(buf)
},
'/binary': function(res) {
res.writeHead(200, {'Content-Type': 'application/octet-stream'})
var buf = Buffer.alloc(256)
for (var i = 0; i < 256; i++) {
buf[i] = i
}
res.end(buf)
},
'/redirect/301': function(res) {
res.writeHead(301, {Location: '/hello'})
res.end()
},
'/redirect/302': function(res) {
res.writeHead(302, {Location: '/hello'})
res.end()
},
'/redirect/303': function(res) {
res.writeHead(303, {Location: '/hello'})
res.end()
},
'/redirect/307': function(res) {
res.writeHead(307, {Location: '/hello'})
res.end()
},
'/redirect/308': function(res) {
res.writeHead(308, {Location: '/hello'})
res.end()
},
'/boom': function(res) {
res.writeHead(500, {'Content-Type': 'text/plain'})
res.end('boom')
},
'/empty': function(res) {
res.writeHead(204)
res.end()
},
'/slow': function(res) {
setTimeout(function() {
res.writeHead(200, {'Cache-Control': 'no-cache, must-revalidate'})
res.end()
}, 100)
},
'/error': function(res) {
res.destroy()
},
'/form': function(res) {
res.writeHead(200, {'Content-Type': 'application/x-www-form-urlencoded'})
res.end('number=1&space=one+two&empty=&encoded=a%2Bb&')
},
'/json': function(res) {
res.writeHead(200, {'Content-Type': 'application/json'})
res.end(JSON.stringify({name: 'Hubot', login: 'hubot'}))
},
'/json-error': function(res) {
res.writeHead(200, {'Content-Type': 'application/json'})
res.end('not json {')
},
'/cookie': function(res, req) {
var setCookie, cookie
var params = querystring.parse(url.parse(req.url).query)
if (params.name && params.value) {
setCookie = [params.name, params.value].join('=')
}
if (params.name) {
cookie = querystring.parse(req.headers['cookie'], '; ')[params.name]
}
res.writeHead(200, {
'Content-Type': 'text/plain',
'Set-Cookie': setCookie || ''
})
res.end(cookie)
},
'/headers': function(res) {
res.writeHead(200, {
Date: 'Mon, 13 Oct 2014 21:02:27 GMT',
'Content-Type': 'text/html; charset=utf-8'
})
res.end()
}
}
module.exports = function(req, res, next) {
const path = url.parse(req.url).pathname
const route = routes[path]
if (route) {
route(res, req)
} else {
next()
}
}