UNPKG

@hestjs/core

Version:

HestJS Core Framework - A TypeScript framework built on Hono with dependency injection and decorators

77 lines 2.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LoggerMiddleware = exports.CorsMiddleware = void 0; exports.Middleware = Middleware; require("reflect-metadata"); const constants_1 = require("../utils/constants"); /** * 中间件装饰器 * @param path 中间件应用的路径 */ function Middleware(path) { return function (target, propertyKey, descriptor) { const metadata = { path: path || "*", }; if (propertyKey) { // 方法级中间件 Reflect.defineMetadata(constants_1.METADATA_KEYS.MIDDLEWARE, metadata, target, propertyKey); } else { // 类级中间件 Reflect.defineMetadata(constants_1.METADATA_KEYS.MIDDLEWARE, metadata, target); } return descriptor; }; } /** * 内置 CORS 中间件 */ class CorsMiddleware { options; constructor(options = {}) { this.options = options; } use(req, res, next) { const origin = this.options.origin || "*"; const methods = this.options.methods || [ "GET", "POST", "PUT", "DELETE", "OPTIONS", ]; const headers = this.options.allowedHeaders || [ "Content-Type", "Authorization", ]; res.header("Access-Control-Allow-Origin", origin); res.header("Access-Control-Allow-Methods", methods.join(", ")); res.header("Access-Control-Allow-Headers", headers.join(", ")); if (req.method === "OPTIONS") { res.status(200).end(); return; } next(); } } exports.CorsMiddleware = CorsMiddleware; /** * 内置日志中间件 */ class LoggerMiddleware { use(req, res, next) { // const start = Date.now(); // const { method, url } = req; // 拦截响应结束 const originalEnd = res.end; res.end = function (chunk, encoding) { // const duration = Date.now() - start; // console.log(`📤 ${method} ${url} - ${res.statusCode} - ${duration}ms`); originalEnd.call(this, chunk, encoding); }; next(); } } exports.LoggerMiddleware = LoggerMiddleware; //# sourceMappingURL=middleware.js.map