POST to GET only | accept: application/json but HTML by default
This commit is contained in:
parent
d30c445868
commit
a43611f664
|
@ -2,3 +2,4 @@
|
|||
/package-lock.json
|
||||
/dist
|
||||
*.js
|
||||
types/request\.d\.ts
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"carrefour": {
|
||||
"app_id": "1e70cf82-6062-4067-8b6c-e5f34c0643b7",
|
||||
"app_secret": "eO8cF7qL5hX2wG0bT5hY6aV2kM7oE8aT2hT4iE8iP5aK3aT4pH"
|
||||
}
|
||||
}
|
61
src/mixer.ts
61
src/mixer.ts
|
@ -28,18 +28,28 @@ export default class Mixer {
|
|||
async http_handler(req: IncomingMessage, res: ServerResponse){
|
||||
|
||||
let urlObj : UrlWithParsedQuery = parseURL(req.url, true)
|
||||
printf('\n -- new client --\n')
|
||||
|
||||
// reject invalid requests
|
||||
if( req.method != 'POST' ) return Mixer.http_error(res, 'only POST method allowed');
|
||||
if( req.method != 'GET' ) return Mixer.http_error(res, 'only GET method allowed');
|
||||
else if( Mixer.valid_urls.indexOf(urlObj.pathname) < 0 ) return Mixer.http_error(res, `only URI [${Mixer.valid_urls}] allowed`);
|
||||
|
||||
printf('\n -- new request --\n')
|
||||
try{
|
||||
|
||||
let query_result = await this.query(req, res)
|
||||
|
||||
// if accept is set to HTML -> html format
|
||||
if( req.headers['accept'] && req.headers['accept'].includes("json") ){
|
||||
res.writeHead(200, { 'Content-Type': 'application/json' })
|
||||
res.end(JSON.stringify( this.format(query_result) ));
|
||||
|
||||
// fallback to JSON by default
|
||||
} else{
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
let query = parseURL(req.url,true).query['q']
|
||||
res.end(this.toHTML(query, this.format(query_result)) );
|
||||
}
|
||||
|
||||
}catch(err){
|
||||
|
||||
res.writeHead(200, { 'Content-Type': 'application/json' })
|
||||
|
@ -47,6 +57,8 @@ export default class Mixer {
|
|||
|
||||
}
|
||||
|
||||
printf(' -- response sent --\n')
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -95,4 +107,49 @@ export default class Mixer {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
toHTML(request:any, input:any) : string {
|
||||
let html = `<html>
|
||||
<head>
|
||||
<title>results of '${request}'</title>
|
||||
<meta charset='utf8'/>
|
||||
<style type='text/css'>
|
||||
table{ border-collapse: collapse; }
|
||||
td{ border: 1px solid #ccc; text-align: center; padding: 0.2em 1em; }
|
||||
thead * { font-weight: bold }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<thead><tr>
|
||||
<td>name</td>
|
||||
<td>gtin</td>
|
||||
<td>description</td>
|
||||
<td>quantity</td>
|
||||
<td>images</td>
|
||||
</tr></thead>
|
||||
<tbody>`
|
||||
|
||||
for( let i = 0 ; i < input.results.length ; i++ ){
|
||||
html += `<tr>
|
||||
<td>${input.results[i].name}</td>
|
||||
<td>${input.results[i].gtin}</td>
|
||||
<td>${input.results[i].description}</td>
|
||||
<td><b>${input.results[i].quantity.value}</b> ${input.results[i].quantity.unit}</td><td>`
|
||||
|
||||
if( input.results[i]['images'] ){
|
||||
|
||||
let keys = Object.keys(input.results[i].images)
|
||||
for( let k of keys )
|
||||
if( input.results[i].images[k] != null )
|
||||
html += `<a href='${input.results[i].images[k]}'><img src='${input.results[i].images[k]}' width=20 height=20/></a>`
|
||||
|
||||
}
|
||||
|
||||
html += `</td></tr>`
|
||||
}
|
||||
|
||||
return html
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue