0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-23 21:53:55 -05:00
astro/packages/integrations/node
Matthew Phillips e4025d1f53
Build to a single file (#2873)
* Build to a single file

* Updates based on initial code review

* Adds a changeset

* Use the default export for cjs module

* Await generatePages

* Prevent timing from causing module to not import

* Fix shared CSS

* Properly handle windows ids

* Dont shadow

* Fix ts errors

* Remove console.log
2022-03-24 17:08:36 -04:00
..
src Build to a single file (#2873) 2022-03-24 17:08:36 -04:00
package.json Adapters v0 (#2855) 2022-03-24 07:26:25 -04:00
readme.md Adapters v0 (#2855) 2022-03-24 07:26:25 -04:00
tsconfig.json Adapters v0 (#2855) 2022-03-24 07:26:25 -04:00

@astrojs/node

An experimental static-side rendering adapter for use with Node.js servers.

In your astro.config.mjs use:

import nodejs from '@astrojs/node';

export default {
  adapter: nodejs()
}

After performing a build there will be a dist/server/entry.mjs module that works like a middleware function. You can use with any framework that supports the Node request and response objects. For example, with Express you can do:

import express from 'express';
import { handler as ssrHandler } from './dist/server/entry.mjs';

const app = express();
app.use(ssrHandler);

app.listen(8080);

Using http

This adapter does not require you use Express and can work with even the http and https modules. The adapter does following the Expression convention of calling a function when either

  • A route is not found for the request.
  • There was an error rendering.

You can use these to implement your own 404 behavior like so:

import http from 'http';
import { handler as ssrHandler } from './dist/server/entry.mjs';

http.createServer(function(req, res) {
  ssrHandler(req, res, err => {
    if(err) {
      res.writeHead(500);
      res.end(err.toString());
    } else {
      // Serve your static assets here maybe?
      // 404?
      res.writeHead(404);
      res.end();
    }
  });
}).listen(8080);