如何使用Cloudflare workers在MongoDB中进行查询?

7

我正在尝试使用mongodb查询simple findOne。Cloudflare worker提供了10ms的CPU时间,但在预览/发布期间会抛出错误。

我尝试安装了这些npm模块。

npm i mongodb, mongodb-core, dgram, fs

var MongoClient = require('mongodb').MongoClient;
try{
    var db = await MongoClient.connect('mongodb+srv://mongoURL',{ useNewUrlParser: true,useUnifiedTopology: true });
    var dbo = db.db("test");
    var result = await dbo.collection("testcollection").findOne()
    const init = {
        status: 200,
        headers: { "Access-Control-Allow-Origin": "*", 'content-type': 'application/json' },
    }
    return new Response(JSON.stringify(result), init)
} catch(e) { console.log(e); return new Response(JSON.stringify(result), init)  }

错误信息在这里 - https://pastebin.com/xMKKjdZF
1个回答

10

目前,Cloudflare Workers不支持原始的TCP/UDP,只支持HTTP/HTTPS。因此,您只能连接到提供HTTP(S)接口的数据库。MongoDB的协议不是基于HTTP的,所以您需要找到某种HTTP API代理来放置在其前面。(还要注意,Cloudflare Workers并不基于Node.js,因此通常情况下,使用Node的系统API的Node模块将无法工作。)


顺便提一下,有一些很棒的MongoDB HTTP接口可用 - 请查看以下链接以获取全面列表 https://docs.mongodb.com/ecosystem/tools/http-interfaces/ - JWPersh
是的,@Kenton,我查看了CF worker文档,但没有找到关于TCP连接的内容。所以尝试调用aws lambda,但webpack在aws-sdk上抛出错误。最终使用mongo-stitch实现了这个功能。 - Vishvendra Singh
1
@JWPersh 我检查了接口,将需要检查它们是否在无服务器上可用。我目前正在尝试无服务器技术。 - Vishvendra Singh
如果您正在托管自己的MongoDB实例,则可以使用运行MongoDB的服务器上的接口来允许HTTP调用。然后,您可以在Cloudflare worker中对该HTTP mongo接口进行HTTP调用。 - JWPersh
接口非常棒,是@JWPersh的理想选择,完全解决了我的问题。不幸的是,我正在使用mongoDB云。在搜索过程中,我发现了这个仓库,可以从worker调用lambda https://github.com/ysugimoto/cloudflare-worker-lambda-gateway - Vishvendra Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接