This package allows the use of the mongodb
npm package in a cloudflare worker. It does this by polyfilling the net
and tls
modules in the mongodb
package to use the cf-mongodb-polyfills
package instead.
Currently cloudflare's workerd does not support using mongodb
package to connect to mongodb. This is due to the fact that net.createConnection
and tls.connect
arent
implemented in the worker runtime (ref) even with the nodejs_compat
or nodejs_compat_v2
compatiblity flags enabled.
However, via the use of the module aliasing
feature in wrangler.toml
, we can replace the net
and tls
modules in the mongodb
package with polyfills in this package. This package provides polyfills for the net
and tls
modules which will use cloudflare:sockets
npm package to create a tcp connection to the mongodb server.
To install the package, run:
npm install cf-mongodb-polyfills
To use the package in a cloudflare worker app, you must create module aliases in the wrangler.toml to point to the polyfills that are in this package.
# wrangler.toml
# ...
[alias]
"net" = "@jchoi2x/cf-mongodb-polyfills/net"
"dns" = "@jchoi2x/cf-mongodb-polyfills/dns"
"tls" = "@jchoi2x/cf-mongodb-polyfills/tls"
With these changes in place, you can now use the mongodb
package in your cloudflare worker app.
import { MongoClient } from 'mongodb';
export default {
async fetch(request, env, ctx): Promise<Response> {
// connect to atlas mongodb
const tlsClient = new MongoClient('mongodb+srv://sharedddas:[email protected]/?retryWrites=true&w=majority&appName=dev');
await tlsClient.connect();
// connect to mongo running locally
const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const db = tlsClient.db('test');
const users = await db.collection('users').find({}).toArray().limit(10);
return Response.json({
users
})
},
} satisfies ExportedHandler<Env>;
Contributions are welcome! Please open an issue or submit a pull request.