Changelog
New updates and improvements at Cloudflare. Subscribe to RSS
Support for Node.js DNS, Net, and Timer APIs in Workers
When using a Worker with the nodejs_compat
compatibility flag enabled, you can now use the following Node.js APIs:
You can use node:net
↗ to create a direct connection to servers via a TCP sockets
with net.Socket
↗.
import net from "node:net";
const exampleIP = "127.0.0.1";
export default { async fetch(req) { const socket = new net.Socket(); socket.connect(4000, exampleIP, function () { console.log("Connected"); });
socket.write("Hello, Server!"); socket.end();
return new Response("Wrote to server", { status: 200 }); },};
import net from "node:net";
const exampleIP = "127.0.0.1";
export default { async fetch(req): Promise<Response> { const socket = new net.Socket(); socket.connect(4000, exampleIP, function () { console.log("Connected"); });
socket.write("Hello, Server!"); socket.end();
return new Response("Wrote to server", { status: 200 }); },} satisfies ExportedHandler;
Additionally, you can now use other APIs incliding net.BlockList
↗ and
net.SocketAddress
↗.
Note that net.Server
↗ is not supported.
You can use node:dns
↗ for name resolution via DNS over HTTPS using
Cloudflare DNS ↗ at 1.1.1.1.
import dns from "node:dns";
let responese = await dns.promises.resolve4("cloudflare.com", "NS");
import dns from 'node:dns';
let responese = await dns.promises.resolve4('cloudflare.com', 'NS');
All node:dns
functions are available, except lookup
, lookupService
, and resolve
which throw "Not implemented" errors when called.
You can use node:timers
↗ to schedule functions to be called at some future period of time.
This includes setTimeout
↗ for calling a function after a delay,
setInterval
↗ for calling a function repeatedly,
and setImmediate
↗ for calling a function in the next iteration of the event loop.
import timers from "node:timers";
console.log("first");timers.setTimeout(() => { console.log("last");}, 10);
timers.setTimeout(() => { console.log("next");});
import timers from "node:timers";
console.log("first");timers.setTimeout(() => { console.log("last");}, 10);
timers.setTimeout(() => { console.log("next");});