68 lines
1.5 KiB
JavaScript
68 lines
1.5 KiB
JavaScript
'use strict'
|
|
|
|
const http = require('http')
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
const form = fs.readFileSync(path.join(__dirname, 'public', 'form.html'))
|
|
const qs = require('querystring')
|
|
const maxData = 2 * 1024 * 1024 // 2mb
|
|
|
|
http.createServer((req, res) => {
|
|
if (req.method === 'GET') {
|
|
get(res)
|
|
return
|
|
}
|
|
if (req.method === 'POST') {
|
|
post(req, res)
|
|
return
|
|
}
|
|
reject(405, 'Method Not Allowed', res)
|
|
}).listen(8080)
|
|
|
|
function get (res) {
|
|
res.writeHead(200, {'Content-Type': 'text/html'})
|
|
res.end(form)
|
|
}
|
|
|
|
function post (req, res) {
|
|
if (req.headers['content-type'] !== 'application/x-www-form-urlencoded') {
|
|
reject(415, 'Unsupported Media Type', res)
|
|
return
|
|
}
|
|
const size = parseInt(req.headers['content-length'], 10)
|
|
if (isNaN(size)) {
|
|
reject(400, 'Bad Request', res)
|
|
return
|
|
}
|
|
if (size > maxData) {
|
|
reject(413, 'Too Large', res)
|
|
return
|
|
}
|
|
const buffer = Buffer.allocUnsafe(size)
|
|
var pos = 0
|
|
|
|
req
|
|
.on('data', (chunk) => {
|
|
const offset = pos + chunk.length
|
|
if (offset > size) {
|
|
reject(413, 'Too Large', res)
|
|
return
|
|
}
|
|
chunk.copy(buffer, pos)
|
|
pos = offset
|
|
})
|
|
.on('end', () => {
|
|
if (pos !== size) {
|
|
reject(400, 'Bad Request', res)
|
|
return
|
|
}
|
|
const data = qs.parse(buffer.toString())
|
|
console.log('User Posted: ', data)
|
|
res.end('You Posted: ' + JSON.stringify(data))
|
|
})
|
|
}
|
|
|
|
function reject (code, msg, res) {
|
|
res.statusCode = code
|
|
res.end(msg)
|
|
} |