Skip to content

Commit 904ead5

Browse files
committed
fix http not PUT req
1 parent 4de1259 commit 904ead5

File tree

4 files changed

+23
-42
lines changed

4 files changed

+23
-42
lines changed

JavaScript/c-commonjs/static.js

+1-23
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,12 @@ const http = require('node:http');
44
const path = require('node:path');
55
const fs = require('node:fs');
66

7-
const MIME_TYPES = {
8-
html: 'text/html; charset=UTF-8',
9-
json: 'application/json; charset=UTF-8',
10-
js: 'application/javascript; charset=UTF-8',
11-
css: 'text/css',
12-
png: 'image/png',
13-
ico: 'image/x-icon',
14-
svg: 'image/svg+xml',
15-
};
16-
17-
const HEADERS = {
18-
'X-XSS-Protection': '1; mode=block',
19-
'X-Content-Type-Options': 'nosniff',
20-
'Strict-Transport-Security': 'max-age=31536000; includeSubdomains; preload',
21-
'Access-Control-Allow-Origin': '*',
22-
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
23-
'Access-Control-Allow-Headers': 'Content-Type',
24-
};
25-
267
module.exports = (root, port, console) => {
278
http.createServer(async (req, res) => {
289
const url = req.url === '/' ? '/index.html' : req.url;
2910
const filePath = path.join(root, url);
3011
try {
3112
const data = await fs.promises.readFile(filePath);
32-
const fileExt = path.extname(filePath).substring(1);
33-
const mimeType = MIME_TYPES[fileExt] || MIME_TYPES.html;
34-
res.writeHead(200, { ...HEADERS, 'Content-Type': mimeType });
3513
res.end(data);
3614
} catch (err) {
3715
res.statusCode = 404;
@@ -40,4 +18,4 @@ module.exports = (root, port, console) => {
4018
}).listen(port);
4119

4220
console.log(`Static on port ${port}`);
43-
};
21+
};

JavaScript/c-commonjs/static/client.js

+11-10
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
const transport = {};
44

5-
transport.http = (url) => (structure) => {
5+
transport.http = url => structure => {
66
const api = {};
77
const services = Object.keys(structure);
88
for (const name of services) {
@@ -11,21 +11,22 @@ transport.http = (url) => (structure) => {
1111
const methods = Object.keys(service);
1212
for (const method of methods) {
1313
api[name][method] = (...args) => new Promise((resolve, reject) => {
14-
fetch(`${url}/api/${name}/${method}`, {
14+
fetch(`${url}/${name}/${method}/${args}`, {
1515
method: 'POST',
1616
headers: { 'Content-Type': 'application/json' },
1717
body: JSON.stringify({ args }),
18-
}).then((res) => {
18+
}).then(res => {
1919
if (res.status === 200) resolve(res.json());
2020
else reject(new Error(`Status Code: ${res.status}`));
2121
});
2222
});
2323
}
2424
}
25+
console.log(api);
2526
return Promise.resolve(api);
2627
};
2728

28-
transport.ws = (url) => (structure) => {
29+
transport.ws = url => structure => {
2930
const socket = new WebSocket(url);
3031
const api = {};
3132
const services = Object.keys(structure);
@@ -34,28 +35,28 @@ transport.ws = (url) => (structure) => {
3435
const service = structure[name];
3536
const methods = Object.keys(service);
3637
for (const method of methods) {
37-
api[name][method] = (...args) => new Promise((resolve) => {
38+
api[name][method] = (...args) => new Promise(resolve => {
3839
const packet = { name, method, args };
3940
socket.send(JSON.stringify(packet));
40-
socket.onmessage = (event) => {
41+
socket.onmessage = event => {
4142
const data = JSON.parse(event.data);
4243
resolve(data);
4344
};
4445
});
4546
}
4647
}
47-
return new Promise((resolve) => {
48+
return new Promise(resolve => {
4849
socket.addEventListener('open', () => resolve(api));
4950
});
5051
};
5152

52-
const scaffold = (url) => {
53+
const scaffold = url => {
5354
const protocol = url.startsWith('ws:') ? 'ws' : 'http';
5455
return transport[protocol](url);
5556
};
5657

5758
(async () => {
58-
const api = await scaffold('http://localhost:8001')({
59+
const api = await scaffold('ws://localhost:8001')({
5960
user: {
6061
create: ['record'],
6162
read: ['id'],
@@ -72,6 +73,6 @@ const scaffold = (url) => {
7273
say: ['message'],
7374
}
7475
});
75-
const data = await api.talks.say('hello');
76+
const data = await api.user.read(3);
7677
console.dir({ data });
7778
})();

JavaScript/c-commonjs/transport/http.js

+9-7
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const HEADERS = {
1212
'Content-Type': 'application/json; charset=UTF-8',
1313
};
1414

15-
const receiveArgs = async (req) => {
15+
const receiveArgs = async req => {
1616
const buffers = [];
1717
for await (const chunk of req) buffers.push(chunk);
1818
const data = Buffer.concat(buffers).toString();
@@ -22,18 +22,20 @@ const receiveArgs = async (req) => {
2222
module.exports = (routing, port, console) => {
2323
http.createServer(async (req, res) => {
2424
res.writeHead(200, HEADERS);
25-
if (req.method !== 'POST') return void res.end('"Not found"');
2625
const { url, socket } = req;
27-
const [place, name, method] = url.substring(1).split('/');
28-
if (place !== 'api') return void res.end('"Not found"');
26+
const [name, method, id] = url.substring(1).split('/');
2927
const entity = routing[name];
3028
if (!entity) return void res.end('"Not found"');
3129
const handler = entity[method];
3230
if (!handler) return void res.end('"Not found"');
33-
const { args } = await receiveArgs(req);
31+
const src = handler.toString();
32+
const signature = src.substring(0, src.indexOf(')'));
33+
const args = [];
34+
if (signature.includes('(id')) args.push(id);
35+
if (signature.includes('{')) args.push(await receiveArgs(req));
3436
console.log(`${socket.remoteAddress} ${method} ${url}`);
35-
const result = await handler(args);
36-
res.end(JSON.stringify(result));
37+
const result = await handler(...args);
38+
res.end(JSON.stringify(result.rows ? result.rows : result));
3739
}).listen(port);
3840

3941
console.log(`API on port ${port}`);

JavaScript/c-commonjs/transport/ws.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module.exports = (routing, port, console) => {
77

88
ws.on('connection', (connection, req) => {
99
const ip = req.socket.remoteAddress;
10-
connection.on('message', async (message) => {
10+
connection.on('message', async message => {
1111
const obj = JSON.parse(message);
1212
const { name, method, args = [] } = obj;
1313
const entity = routing[name];
@@ -25,7 +25,7 @@ module.exports = (routing, port, console) => {
2525
console.log(`${ip} ${name}.${method}(${parameters})`);
2626
try {
2727
const result = await handler(...args);
28-
connection.send(JSON.stringify(result), { binary: false });
28+
connection.send(JSON.stringify(result.rows ? result.rows : result), { binary: false });
2929
} catch (err) {
3030
console.error(err);
3131
connection.send('"Server error"', { binary: false });

0 commit comments

Comments
 (0)