@gieo/express 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -39,10 +39,10 @@ class ExpressPlus {
39
39
  const method = req.method;
40
40
  const parsedUrl = (0, url_1.parse)(req.url || "", true);
41
41
  const pathname = parsedUrl.pathname || "/";
42
- const route = this.routes[method].find((r) => r.path === pathname);
43
42
  const extendedReq = req;
44
43
  const extendedRes = res;
45
44
  extendedReq.query = parsedUrl.query;
45
+ extendedReq.params = {};
46
46
  extendedReq.getBody = async () => {
47
47
  if (extendedReq.body)
48
48
  return extendedReq.body;
@@ -68,6 +68,30 @@ class ExpressPlus {
68
68
  extendedRes.setHeader("Content-Type", "application/json");
69
69
  extendedRes.end(JSON.stringify(data));
70
70
  };
71
+ // 🔍 Tìm route phù hợp (hỗ trợ dynamic route)
72
+ const route = this.routes[method].find((r) => {
73
+ const routeParts = r.path.split("/").filter(Boolean);
74
+ const urlParts = pathname.split("/").filter(Boolean);
75
+ if (routeParts.length !== urlParts.length)
76
+ return false;
77
+ return routeParts.every((part, i) => {
78
+ return part.startsWith(":") || part === urlParts[i];
79
+ });
80
+ });
81
+ // 🧠 Trích xuất params nếu có
82
+ if (route) {
83
+ const routeParts = route.path.split("/").filter(Boolean);
84
+ const urlParts = pathname.split("/").filter(Boolean);
85
+ routeParts.forEach((part, i) => {
86
+ if (part.startsWith(":")) {
87
+ const key = part.slice(1);
88
+ extendedReq.params[key] = urlParts[i];
89
+ }
90
+ });
91
+ }
92
+ // 🧪 Logging đơn giản
93
+ console.log(`[${method}] ${pathname}`);
94
+ // 🧩 Middleware + Route handler
71
95
  let i = 0;
72
96
  const next = () => {
73
97
  const middleware = this.middlewares[i++];
@@ -78,7 +102,7 @@ class ExpressPlus {
78
102
  route.handler(extendedReq, extendedRes);
79
103
  }
80
104
  else {
81
- extendedRes.status(404).end("Not Found");
105
+ extendedRes.status(404).json({ message: "Not Found" });
82
106
  }
83
107
  };
84
108
  next();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gieo/express",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "keywords": [],
@@ -8,7 +8,7 @@
8
8
  "license": "ISC",
9
9
  "devDependencies": {
10
10
  "@gieo/utils": "^1.0.5",
11
- "@types/node": "^24.2.0",
11
+ "@types/node": "^24.2.1",
12
12
  "jiti": "^2.5.1",
13
13
  "typescript": "^5.9.2"
14
14
  },
package/src/index.ts CHANGED
@@ -4,6 +4,7 @@ import { parse } from "url";
4
4
  // Mở rộng Request
5
5
  interface ExtendedRequest extends IncomingMessage {
6
6
  query?: Record<string, string | string[]>;
7
+ params?: Record<string, string>;
7
8
  bodyRaw?: string;
8
9
  body?: any;
9
10
  getBody: () => Promise<any>;
@@ -78,12 +79,11 @@ class ExpressPlus {
78
79
  const parsedUrl = parse(req.url || "", true);
79
80
  const pathname = parsedUrl.pathname || "/";
80
81
 
81
- const route = this.routes[method].find((r) => r.path === pathname);
82
-
83
82
  const extendedReq = req as ExtendedRequest;
84
83
  const extendedRes = res as ExtendedResponse;
85
84
 
86
85
  extendedReq.query = parsedUrl.query;
86
+ extendedReq.params = {};
87
87
  extendedReq.getBody = async () => {
88
88
  if (extendedReq.body) return extendedReq.body;
89
89
 
@@ -114,6 +114,35 @@ class ExpressPlus {
114
114
  extendedRes.end(JSON.stringify(data));
115
115
  };
116
116
 
117
+ // 🔍 Tìm route phù hợp (hỗ trợ dynamic route)
118
+ const route = this.routes[method].find((r) => {
119
+ const routeParts = r.path.split("/").filter(Boolean);
120
+ const urlParts = pathname.split("/").filter(Boolean);
121
+
122
+ if (routeParts.length !== urlParts.length) return false;
123
+
124
+ return routeParts.every((part, i) => {
125
+ return part.startsWith(":") || part === urlParts[i];
126
+ });
127
+ });
128
+
129
+ // 🧠 Trích xuất params nếu có
130
+ if (route) {
131
+ const routeParts = route.path.split("/").filter(Boolean);
132
+ const urlParts = pathname.split("/").filter(Boolean);
133
+
134
+ routeParts.forEach((part, i) => {
135
+ if (part.startsWith(":")) {
136
+ const key = part.slice(1);
137
+ extendedReq.params![key] = urlParts[i];
138
+ }
139
+ });
140
+ }
141
+
142
+ // 🧪 Logging đơn giản
143
+ console.log(`[${method}] ${pathname}`);
144
+
145
+ // 🧩 Middleware + Route handler
117
146
  let i = 0;
118
147
  const next = () => {
119
148
  const middleware = this.middlewares[i++];
@@ -122,7 +151,7 @@ class ExpressPlus {
122
151
  } else if (route) {
123
152
  route.handler(extendedReq, extendedRes);
124
153
  } else {
125
- extendedRes.status(404).end("Not Found");
154
+ extendedRes.status(404).json({ message: "Not Found" });
126
155
  }
127
156
  };
128
157