Files
mol-robot/http/index.js
mol 901f127b8a
Some checks failed
continuous-integration/drone Build is failing
feat: v1.2.0
2023-12-13 18:54:37 +08:00

59 lines
1.7 KiB
JavaScript

import http from 'http';
import logger from '#root/utils/logger.js';
export default class CreateWebhookServer {
constructor() {
this.http = null;
this.handlers = [];
}
startListen(port) {
this.http = http
.createServer((request, response) => {
const { url, method } = request;
logger(`监听到请求:${url}, 方法: ${method}`);
if (method.toLowerCase() !== 'post') return;
let body = '';
request
.on('error', (err) => {
console.error(err);
})
.on('data', (chunk) => {
body += chunk;
})
.on('end', () => {
try {
const jsonData = JSON.parse(body);
Promise.all(
this.handlers.map((val) =>
jsonData.event === val.event
? val.handler(jsonData)
: Promise.resolve(),
),
)
.then(() => {
response.writeHead(200, { 'Content-Type': 'text/plain' });
response.write('Hello World');
response.end();
})
.catch((e) => {
response.writeHead(405, { 'Content-Type': 'text/plain' });
response.write(e);
response.end();
});
} catch (e) {
response.writeHead(405, { 'Content-Type': 'text/plain' });
response.write(e);
response.end();
}
});
})
.listen(port || 8080);
}
registerHanlder(handlers) {
logger(`${handlers.map((item) => item.event).join('、')}函数已引入`);
this.handlers.push(...handlers);
}
}