Skip to content

Commit 30d6bda

Browse files
docs: describe signal property behavior in adapter-node
Co-authored-by: Ben McCann <[email protected]>
1 parent 24887c7 commit 30d6bda

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

.changeset/twelve-jokes-prove.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
'@sveltejs/kit': minor
44
---
55

6-
feat: add signal property to request in vite, node environments
6+
feat: add [`signal`](https://developer.mozilla.org/en-US/docs/Web/API/Request/signal) property to request

documentation/docs/25-build-and-deploy/40-adapter-node.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,3 +263,47 @@ app.listen(3000, () => {
263263
console.log('listening on port 3000');
264264
});
265265
```
266+
267+
## Aborted requests
268+
269+
The adapter will fire an `abort` event when the incoming request is cancelled before completion. You can access the [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) via `event.request.signal`.
270+
271+
A pretty typical example of using the `signal` property:
272+
273+
```js
274+
/// file: src/routes/api/object/[slug]/+server.js
275+
/** @type {import('./$types').RequestHandler} */
276+
export async function GET({ request, params }) {
277+
const stream = await s3.getObject("bucket", params.slug, {
278+
signal: request.signal
279+
}) ;
280+
281+
return new Response(stream);
282+
}
283+
```
284+
285+
Another example, this time using [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events):
286+
287+
```js
288+
/// file: src/routes/api/sse/+server.js
289+
/** @type {import('./$types').RequestHandler} */
290+
export function GET({ request }) {
291+
const stream = new ReadableStream({
292+
start(controller) {
293+
const interval = setInterval(() => {
294+
controller.enqueue("data: Hello, world!\n\n\n");
295+
}, 1000);
296+
297+
request.signal.onabort = () => {
298+
clearInterval(interval);
299+
};
300+
}
301+
});
302+
303+
return new Response(stream, {
304+
headers: {
305+
"Content-Type": "text/event-stream",
306+
}
307+
});
308+
}
309+
```

0 commit comments

Comments
 (0)