Back to H3

Node.js

docs/3.adapters/1.node.md

1.15.111.3 KB
Original Source

Node.js

Natively run h3 servers with Node.js.

In order to start h3 apps in Node.js, use toNodeListener adapter to convert h3 app into a Node.js requestListener.

Usage

First, create an h3 app:

js
import { createApp, defineEventHandler } from "h3";

export const app = createApp();

app.use(defineEventHandler(() => "Hello world!"));

Create Node.js server entry:

js
import { createServer } from "node:http";
import { toNodeListener } from "h3";
import { app } from "./app.mjs";

createServer(toNodeListener(app)).listen(process.env.PORT || 3000);

Now, you can run you h3 app natively with Node.js:

bash
node ./server.mjs

Using listhen

Alternatively, you can use unjs/listhen. In this method, you only need to make app.mjs with a default or app export.

Run this command to run your servers:

sh
npx --yes listhen ./app.ts

WebSocket support

:read-more{to="https://crossws.unjs.io/adapters/node"}

[!TIP] When using listhen method, websocket is supported out of the box!

ts
import wsAdapter from "crossws/adapters/node";

const { handleUpgrade } = wsAdapter(app.websocket);

server.on("upgrade", handleUpgrade);