Skip to content

Commit d1aa242

Browse files
committed
feat: support async route
1 parent 57bd504 commit d1aa242

File tree

3 files changed

+53
-17
lines changed

3 files changed

+53
-17
lines changed

packages/react-imvc-v3/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-imvc",
3-
"version": "3.4.5",
3+
"version": "3.5.0",
44
"description": "An Isomorphic MVC Framework",
55
"main": "dist/index.js",
66
"typings": "dist/index.d.ts",
@@ -28,7 +28,7 @@
2828
"pretest:coverage": "rimraf coverage playwright-report .nyc_output",
2929
"test:coverage": "playwright test",
3030
"project:start": "node --openssl-legacy-provider .\\bin\\scripts.js start --config .\\project\\imvc.config.ts",
31-
"project:build": "node --openssl-legacy-provider .\\bin\\scripts.js build?inspect-brk --config .\\project\\imvc.config.ts",
31+
"project:build": "node --openssl-legacy-provider .\\bin\\scripts.js build --config .\\project\\imvc.config.ts",
3232
"project:preview": "npx tsx --openssl-legacy-provider publish/start"
3333
},
3434
"files": [
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,29 @@
1+
import express, { Router } from 'express'
2+
import http from 'http'
3+
14
export { default as my_router } from './my_router'
5+
6+
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
7+
8+
export const my_async_router = async (
9+
app: express.Express,
10+
server: http.Server
11+
) => {
12+
console.log('my_async_router is running')
13+
await delay(100)
14+
console.log('my_async_router is done')
15+
}
16+
17+
export const my_another_async_router = async (
18+
app: express.Express,
19+
server: http.Server
20+
) => {
21+
console.log('my_another_async_router is running')
22+
await delay(100)
23+
console.log('my_another_async_router is done')
24+
}
25+
26+
export const my_sync_router = (app: express.Express, server: http.Server) => {
27+
console.log('my_sync_router is running')
28+
console.log('my_sync_router is done')
29+
}

packages/react-imvc-v3/src/start/index.ts

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ declare global {
2323
}
2424
}
2525

26+
export type Route = (
27+
app: express.Express,
28+
server: http.Server
29+
) => void | Promise<void>
30+
31+
export type Routes = Record<string, Route>
32+
2633
export default async function start(options: Options): Promise<Result> {
2734
let config = getConfig(options)
2835
let [app, pageRouter] = await Promise.all([
@@ -64,18 +71,6 @@ export default async function start(options: Options): Promise<Result> {
6471

6572
let routePath = path.join(config.root, config.routes)
6673

67-
if (hasModuleFile(routePath)) {
68-
// get server routes
69-
let routes = require(routePath)
70-
routes = routes.default || routes
71-
Object.keys(routes).forEach((key) => {
72-
let route = routes[key]
73-
if (typeof route === 'function') {
74-
route(app, server)
75-
}
76-
})
77-
}
78-
7974
// 添加 renderPage 方法,让自定义的 routes 里可以手动调用,走 IMVC 的渲染流程
8075
let addRenderPage: RequestHandler = (req, res, next) => {
8176
res.renderPage = pageRouter
@@ -113,6 +108,19 @@ export default async function start(options: Options): Promise<Result> {
113108
}
114109

115110
app.use(addRenderPage as express.RequestHandler)
111+
112+
// get server routes
113+
let routes = getRoutes(routePath)
114+
115+
await Promise.all(
116+
Object.keys(routes).map(async (key) => {
117+
let route = routes[key]
118+
if (typeof route === 'function') {
119+
await route(app, server)
120+
}
121+
})
122+
)
123+
116124
app.use(pageRouter)
117125
app.use(catch404)
118126
// will print stacktrace
@@ -193,10 +201,10 @@ function normalizePort(val: string | number): string | number | undefined {
193201
return void 0
194202
}
195203

196-
function hasModuleFile(filename: string): boolean {
204+
const getRoutes = (filename: string): Routes => {
197205
try {
198-
return !!require.resolve(filename)
206+
return require(filename)
199207
} catch (_) {
200-
return false
208+
return {}
201209
}
202210
}

0 commit comments

Comments
 (0)