mirror of
https://github.com/sergeyyarkov/asu_tools_service.git
synced 2026-10-11 02:19:09 +03:00
57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
import http from "node:http";
|
|
import { createRequest } from "./request.js";
|
|
import { createResponse } from "./response.js";
|
|
import { createRouter } from "./route.js";
|
|
|
|
/** @import { HttpServerOptions, HttpServer, HttpContext } from "./types/http-server.js" */
|
|
|
|
/**
|
|
* @param {HttpServerOptions} options
|
|
* @returns {HttpServer}
|
|
*/
|
|
export function createServer(options) {
|
|
const router = createRouter();
|
|
|
|
const server = http.createServer((req, res) => {
|
|
try {
|
|
const request = createRequest(req);
|
|
const response = createResponse(res);
|
|
|
|
/** @type {HttpContext} */
|
|
const ctx = {
|
|
data: null,
|
|
req: request,
|
|
res: response,
|
|
searchParams: request.url.searchParams,
|
|
params: {},
|
|
local: {}
|
|
};
|
|
|
|
if (options.cors) {
|
|
res.setHeaders(
|
|
new Headers({
|
|
"Access-Control-Allow-Origin": options.cors.allow,
|
|
"Access-Control-Allow-Methods": options.cors.methods,
|
|
"Access-Control-Allow-Headers": options.cors.headers
|
|
})
|
|
);
|
|
}
|
|
|
|
console.log(`${new Date().toISOString()} Request: ${ctx.req.url}`);
|
|
router.handle(ctx);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
});
|
|
|
|
return {
|
|
listen(port = 3000, cb) {
|
|
server.listen(port, cb);
|
|
},
|
|
router: {
|
|
prefix: router.prefix,
|
|
define: router.define
|
|
}
|
|
};
|
|
}
|