Skip to content

Commit 9474c4b

Browse files
authoredNov 29, 2023
feat: preserve vite.middlewares connect instance after restarts (#15166)
1 parent ec401da commit 9474c4b

File tree

13 files changed

+23
-40
lines changed

13 files changed

+23
-40
lines changed
 

‎docs/config/server-options.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,7 @@ async function createServer() {
249249
appType: 'custom', // don't include Vite's default HTML handling middlewares
250250
})
251251
// Use vite's connect instance as middleware
252-
app.use((req, res, next) => {
253-
vite.middlewares.handle(req, res, next)
254-
})
252+
app.use(vite.middlewares)
255253

256254
app.use('*', async (req, res) => {
257255
// Since `appType` is `'custom'`, should serve response here.

‎docs/guide/api-javascript.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,7 @@ const vite = await createServer({
6767
},
6868
})
6969
70-
server.use((req, res, next) => {
71-
vite.middlewares.handle(req, res, next)
72-
})
70+
parentServer.use(vite.middlewares)
7371
```
7472

7573
</details>

‎docs/guide/ssr.md

+5-7
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,11 @@ async function createServer() {
8989

9090
// Use vite's connect instance as middleware. If you use your own
9191
// express router (express.Router()), you should use router.use
92-
app.use((req, res, next) => {
93-
// When the server restarts (for example after the user modifies
94-
// vite.config.js), `vite.middlewares` will be reassigned. Calling
95-
// `vite.middlewares` inside a wrapper handler ensures that the
96-
// latest Vite middlewares are always used.
97-
vite.middlewares.handle(req, res, next)
98-
})
92+
// When the server restarts (for example after the user modifies
93+
// vite.config.js), `vite.middlewares` is still going to be the same
94+
// reference (with a new internal stack of Vite and plugin-injected
95+
// middlewares. The following is valid even after restarts.
96+
app.use(vite.middlewares)
9997

10098
app.use('*', async (req, res) => {
10199
// serve index.html - we will tackle this next

‎packages/vite/src/node/server/index.ts

+7
Original file line numberDiff line numberDiff line change
@@ -963,9 +963,16 @@ async function restartServer(server: ViteDevServer) {
963963
await server.close()
964964

965965
// Assign new server props to existing server instance
966+
const middlewares = server.middlewares
966967
newServer._configServerPort = server._configServerPort
967968
newServer._currentServerPort = server._currentServerPort
968969
Object.assign(server, newServer)
970+
971+
// Keep the same connect instance so app.use(vite.middlewares) works
972+
// after a restart in middlewareMode (.route is always '/')
973+
middlewares.stack = newServer.middlewares.stack
974+
server.middlewares = middlewares
975+
969976
// Rebind internal server variable so functions reference the user server
970977
newServer._setInternalServer(server)
971978
}

‎playground/css-lightningcss-proxy/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ export async function createServer(root = process.cwd(), hmrPort) {
4545
appType: 'custom',
4646
})
4747
// use vite's connect instance as middleware
48-
app.use((req, res, next) => {
49-
vite.middlewares.handle(req, res, next)
50-
})
48+
app.use(vite.middlewares)
5149

5250
app.use('*', async (req, res, next) => {
5351
try {

‎playground/json/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ export async function createServer(root = process.cwd(), hmrPort) {
3737
},
3838
})
3939
// use vite's connect instance as middleware
40-
app.use((req, res, next) => {
41-
vite.middlewares.handle(req, res, next)
42-
})
40+
app.use(vite.middlewares)
4341

4442
app.use('*', async (req, res) => {
4543
try {

‎playground/optimize-missing-deps/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ export async function createServer(root = process.cwd(), hmrPort) {
2626
},
2727
appType: 'custom',
2828
})
29-
app.use((req, res, next) => {
30-
vite.middlewares.handle(req, res, next)
31-
})
29+
app.use(vite.middlewares)
3230

3331
app.use('*', async (req, res) => {
3432
try {

‎playground/ssr-conditions/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@ export async function createServer(root = process.cwd(), hmrPort) {
3535
appType: 'custom',
3636
})
3737

38-
app.use((req, res, next) => {
39-
vite.middlewares.handle(req, res, next)
40-
})
38+
app.use(vite.middlewares)
4139

4240
app.use('*', async (req, res) => {
4341
try {

‎playground/ssr-deps/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,7 @@ export async function createServer(root = process.cwd(), hmrPort) {
8484
],
8585
})
8686
// use vite's connect instance as middleware
87-
app.use((req, res, next) => {
88-
vite.middlewares.handle(req, res, next)
89-
})
87+
app.use(vite.middlewares)
9088

9189
app.use('*', async (req, res) => {
9290
try {

‎playground/ssr-html/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,7 @@ export async function createServer(root = process.cwd(), hmrPort) {
6666
],
6767
})
6868
// use vite's connect instance as middleware
69-
app.use((req, res, next) => {
70-
vite.middlewares.handle(req, res, next)
71-
})
69+
app.use(vite.middlewares)
7270

7371
app.use('*', async (req, res, next) => {
7472
try {

‎playground/ssr-noexternal/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ export async function createServer(
4444
},
4545
appType: 'custom',
4646
})
47-
app.use((req, res, next) => {
48-
vite.middlewares.handle(req, res, next)
49-
})
47+
app.use(vite.middlewares)
5048
}
5149

5250
app.use('*', async (req, res) => {

‎playground/ssr-pug/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ export async function createServer(root = process.cwd(), hmrPort) {
4545
appType: 'custom',
4646
})
4747
// use vite's connect instance as middleware
48-
app.use((req, res, next) => {
49-
vite.middlewares.handle(req, res, next)
50-
})
48+
app.use(vite.middlewares)
5149

5250
app.use('*', async (req, res) => {
5351
try {

‎playground/ssr/server.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ export async function createServer(
3939
customLogger,
4040
})
4141
// use vite's connect instance as middleware
42-
app.use((req, res, next) => {
43-
vite.middlewares.handle(req, res, next)
44-
})
42+
app.use(vite.middlewares)
4543

4644
app.use('*', async (req, res, next) => {
4745
try {

0 commit comments

Comments
 (0)
Please sign in to comment.