Code files

This commit is contained in:
Akhil
2017-07-31 11:33:31 +05:30
parent 073a63ebdd
commit b9ae409ec0
801 changed files with 17535 additions and 0 deletions
@@ -0,0 +1,16 @@
{
"name": "accepting-json",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"keywords": [],
"author": "David Mark Clements",
"license": "MIT",
"dependencies": {
"fast-json-parse": "^1.0.2"
}
}
@@ -0,0 +1,29 @@
<form method="post">
<input type="text" name="userinput1"><br>
<input type="text" name="userinput2"><br>
<input type="submit">
</form>
<script>
document.forms[0].addEventListener('submit', function (evt) {
evt.preventDefault()
var form = this
var data = Object.keys(form).reduce(function (o, i) {
if (form[i].name) o[form[i].name] = form[i].value
return o
}, {})
form.innerHTML = ''
var xhr = new XMLHttpRequest()
xhr.open('POST', '/')
xhr.setRequestHeader('Content-Type', 'application/json')
xhr.send(JSON.stringify(data))
xhr.addEventListener('load', function () {
var res
try { res = JSON.parse(this.response) } catch (e) {
res = {error: 'Mangled Response'}
}
form.innerHTML = res.error
? res.error
: 'You Posted: ' + JSON.stringify(res.data)
})
})
</script>
@@ -0,0 +1,73 @@
'use strict'
const http = require('http')
const fs = require('fs')
const path = require('path')
const parse = require('fast-json-parse')
const form = fs.readFileSync(path.join(__dirname, 'public', 'form.html'))
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/json') {
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 = buffer.toString()
const parsed = parse(data)
if (parsed.err) {
reject(400, 'Bad Request', res)
return
}
console.log('User Posted: ', parsed.value)
res.end('{"data": ' + data + "}")
})
}
function reject (code, msg, res) {
res.statusCode = code
res.end(msg)
}