Skip to content

Commit 30f89d5

Browse files
authored
fix: unstable_middlwares doesn't exec when render.middlewares not empty (#6624)
1 parent eb9a8b5 commit 30f89d5

File tree

5 files changed

+60
-4
lines changed

5 files changed

+60
-4
lines changed

.changeset/strange-crabs-walk.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@modern-js/server-core': patch
3+
---
4+
5+
fix: unstable_middlwares doesn't exec when render.middlewares not empty
6+
fix: 修复 unstable_middlwares 在 `render.middlewares` 不为空时不执行的问题

packages/server/core/src/plugins/customServer/index.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,19 +158,28 @@ export class CustomServer {
158158
};
159159
}
160160

161-
async getServerMiddleware(): Promise<
161+
async getServerMiddleware(
162+
renderMiddlewares?: Middleware<ServerNodeEnv & ServerEnv>[],
163+
): Promise<
162164
| Middleware<ServerNodeEnv & ServerEnv>
163165
| Array<Middleware<ServerNodeEnv & ServerEnv>>
164166
| undefined
165167
> {
166168
const serverMiddleware = await this.serverMiddlewarePromise;
167169

170+
// if no server middleware in server/index.ts, return render middleware
168171
if (!serverMiddleware) {
169-
return;
172+
return renderMiddlewares;
170173
}
171174

175+
// if server middleware is array, concat it with render middleware
172176
if (Array.isArray(serverMiddleware)) {
173-
return getServerMidFromUnstableMid(serverMiddleware);
177+
const unstableMiddlewares = getServerMidFromUnstableMid(serverMiddleware);
178+
return [...(renderMiddlewares || []), ...unstableMiddlewares];
179+
} else if (renderMiddlewares) {
180+
// if server middleware is not array, which means it is deprecated mode.
181+
// if there has render middlewares, ignore the deprecated middlewares.
182+
return renderMiddlewares;
174183
}
175184

176185
return async (c, next) => {

packages/server/core/src/plugins/render/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ export const renderPlugin = (): ServerPlugin => ({
4141

4242
const customServer = new CustomServer(runner, serverBase!, pwd);
4343

44+
// render.middleware can register by server config and prepare hook
45+
// render.middleware is the same as unstable_middleware in server/index.ts, but execute before unstable_middleware
46+
// TODO:check api and add docs for render.middleware
4447
const serverMiddleware =
4548
config.render?.middleware &&
4649
getServerMidFromUnstableMid(config.render.middleware);
@@ -75,7 +78,7 @@ export const renderPlugin = (): ServerPlugin => ({
7578
});
7679

7780
const customServerMiddleware =
78-
serverMiddleware || (await customServer.getServerMiddleware());
81+
await customServer.getServerMiddleware(serverMiddleware);
7982

8083
customServerMiddleware &&
8184
middlewares.push({
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { defineConfig } from '@modern-js/app-tools/server';
2+
3+
export default defineConfig({
4+
render: {
5+
middleware: [
6+
async (c, next) => {
7+
c.response.headers.set('x-render-middleware-config', 'ok');
8+
9+
await next();
10+
},
11+
],
12+
},
13+
plugins: [
14+
{
15+
name: 'custom-plugin-in-config',
16+
setup: () => {
17+
return {
18+
config: async config => {
19+
if (!config.render) {
20+
config.render = {};
21+
}
22+
config.render.middleware ||= [];
23+
config.render.middleware.push(async (c, next) => {
24+
c.response.headers.set('x-render-middleware-plugin', 'ok');
25+
await next();
26+
});
27+
28+
return config;
29+
},
30+
};
31+
},
32+
},
33+
],
34+
});

tests/integration/server-hook/new-middleware/tests/index.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ describe('test new middleware run correctly', () => {
5252
expect(headers).toHaveProperty('x-custom-value', 'modern');
5353

5454
expect(headers).toHaveProperty('x-matched-route', 'main');
55+
56+
expect(headers).toHaveProperty('x-render-middleware-config', 'ok');
57+
58+
expect(headers).toHaveProperty('x-render-middleware-plugin', 'ok');
5559
});
5660

5761
test('should redirect corretly', async () => {

0 commit comments

Comments
 (0)