aboutsummaryrefslogtreecommitdiff
path: root/packages/integrations/node/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/node/src')
-rw-r--r--packages/integrations/node/src/http-server.ts5
-rw-r--r--packages/integrations/node/src/index.ts2
-rw-r--r--packages/integrations/node/src/server.ts1
-rw-r--r--packages/integrations/node/src/standalone.ts6
4 files changed, 11 insertions, 3 deletions
diff --git a/packages/integrations/node/src/http-server.ts b/packages/integrations/node/src/http-server.ts
index 8eea3c170..fee30aaec 100644
--- a/packages/integrations/node/src/http-server.ts
+++ b/packages/integrations/node/src/http-server.ts
@@ -3,6 +3,7 @@ import http from 'http';
import https from 'https';
import send from 'send';
import { fileURLToPath } from 'url';
+import enableDestroy from 'server-destroy';
interface CreateServerOptions {
client: URL;
@@ -19,6 +20,7 @@ export function createServer(
if (req.url) {
let pathname = removeBase(req.url);
pathname = pathname[0] === '/' ? pathname : '/' + pathname;
+ pathname = new URL(pathname, `http://${host}:${port}`).pathname;
const stream = send(req, encodeURI(decodeURI(pathname)), {
root: fileURLToPath(client),
dotfiles: pathname.startsWith('/.well-known/') ? 'allow' : 'deny',
@@ -63,6 +65,7 @@ export function createServer(
httpServer = http.createServer(listener);
}
httpServer.listen(port, host);
+ enableDestroy(httpServer);
// Resolves once the server is closed
const closed = new Promise<void>((resolve, reject) => {
@@ -79,7 +82,7 @@ export function createServer(
server: httpServer,
stop: async () => {
await new Promise((resolve, reject) => {
- httpServer.close((err) => (err ? reject(err) : resolve(undefined)));
+ httpServer.destroy((err) => (err ? reject(err) : resolve(undefined)));
});
},
};
diff --git a/packages/integrations/node/src/index.ts b/packages/integrations/node/src/index.ts
index bbe5e44b4..d882f34fb 100644
--- a/packages/integrations/node/src/index.ts
+++ b/packages/integrations/node/src/index.ts
@@ -6,7 +6,7 @@ export function getAdapter(options: Options): AstroAdapter {
name: '@astrojs/node',
serverEntrypoint: '@astrojs/node/server.js',
previewEntrypoint: '@astrojs/node/preview.js',
- exports: ['handler'],
+ exports: ['handler', 'startServer'],
args: options,
};
}
diff --git a/packages/integrations/node/src/server.ts b/packages/integrations/node/src/server.ts
index e0ccf6599..c4c79f6a8 100644
--- a/packages/integrations/node/src/server.ts
+++ b/packages/integrations/node/src/server.ts
@@ -13,6 +13,7 @@ export function createExports(manifest: SSRManifest, options: Options) {
const app = new NodeApp(manifest);
return {
handler: middleware(app, options.mode),
+ startServer: () => startServer(app, options)
};
}
diff --git a/packages/integrations/node/src/standalone.ts b/packages/integrations/node/src/standalone.ts
index 789269860..d3ab36793 100644
--- a/packages/integrations/node/src/standalone.ts
+++ b/packages/integrations/node/src/standalone.ts
@@ -55,8 +55,12 @@ export default function startServer(app: NodeApp, options: Options) {
);
const protocol = server.server instanceof https.Server ? 'https' : 'http';
+
// eslint-disable-next-line no-console
console.log(`Server listening on ${protocol}://${host}:${port}`);
- return server.closed();
+ return {
+ server,
+ done: server.closed()
+ };
}