When starting a new server, in addition to main fetch handler, you can provide additional options to customize listening server.
import { serve } from "srvx";
serve({
// Generic options
port: 3000,
hostname: "localhost",
// Runtime specific options
node: {},
bun: {},
deno: {},
// Main server handler
fetch: () => new Response("๐ Hello there!"),
});
There are two kind of options:
portThe port server should be listening to.
Default is value of PORT environment variable or 3000.
0 to use a random port.hostnameThe hostname (IP or resolvable host) server listener should bound to.
When not provided, server will listen to all network interfaces by default.
localhost.reusePortEnabling this option allows multiple processes to bind to the same port, which is useful for load balancing.
exclusive flag enabled by default, srvx uses non-exclusive mode for consistency.silentIf enabled, no server listening message will be printed (enabled by default when TEST environment variable is set).
protocolThe protocol to use for the server.
Possible values are http or https.
If protocol is not set, Server will use http as the default protocol or https if both tls.cert and tls.key options are provided.
tlsTLS server options.
Example:
import { serve } from "srvx";
serve({
tls: { cert: "./server.crt", key: "./server.key" },
fetch: () => new Response("๐ Hello there!"),
});
Options:
cert: Path or inline content for the certificate in PEM format (required).key: Path or inline content for the private key in PEM format (required).passphrase: Passphrase for the private key (optional).cert and key values in PEM format starting with -----BEGIN .onErrorRuntime agnostic error handler.
Example:
import { serve } from "srvx";
serve({
fetch: () => new Response("๐ Hello there!"),
onError(error) {
return new Response(`<pre>${error}\n${error.stack}</pre>`, {
headers: { "Content-Type": "text/html" },
});
},
});
Example:
import { serve } from "srvx";
serve({
node: {
maxHeadersize: 16384 * 2, // Double default
ipv6Only: true, // Disable dual-stack support
// http2: false // Disable http2 support (enabled by default in TLS mode)
},
fetch: () => new Response("๐ Hello there!"),
});
Example:
import { serve } from "srvx";
serve({
bun: {
error(error) {
return new Response(`<pre>${error}\n${error.stack}</pre>`, {
headers: { "Content-Type": "text/html" },
});
},
},
fetch: () => new Response("๐ Hello there!"),
});
Example:
import { serve } from "srvx";
serve({
deno: {
onError(error) {
return new Response(`<pre>${error}\n${error.stack}</pre>`, {
headers: { "Content-Type": "text/html" },
});
},
},
fetch: () => new Response("๐ Hello there!"),
});