@hestjs/core
Version:
HestJS Core Framework - A TypeScript framework built on Hono with dependency injection and decorators
77 lines • 2.3 kB
JavaScript
;
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