首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React中的网络抓取& MongoDB Stitch应用程序

React中的网络抓取& MongoDB Stitch应用程序
EN

Stack Overflow用户
提问于 2020-04-17 21:59:16
回答 1查看 130关注 0票数 0

在看到MERN项目允许简单的用户身份验证、快速部署等功能之后,我正在将它移到React + MongoDB Stitch中。

然而,我有一个很难理解的时间,在哪里和如何我可以调用一个网站刮擦功能。以前,我在Express.js中使用诸如:

代码语言:javascript
复制
app.post("/api/getTitleAtURL", (req, res) => {
  if (req.body.url) {
    request(req.body.url, function(error, response, body) {
      if (!error && response.statusCode == 200) {
        const $ = cheerio.load(body);
        const webpageTitle = $("title").text();
        const metaDescription = $("meta[name=description]").attr("content");
        const webpage = {
          title: webpageTitle,
          metaDescription: metaDescription
        };
        res.send(webpage);
      } else {
        res.status(400).send({ message: "THIS IS AN ERROR" });
      }
    });
  }
});

但是很明显,对于Stitch来说,不需要Node & Express。是否有一种方法可以获取另一个站点的内容,而不必托管一个只为该函数服务的node.js应用程序?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-18 19:11:03

结果表明,您可以在MongoDB Stitch 中构建允许您上传外部依赖项的函数。

但是,也有一些限制,例如,cheerio没有作为上传的外部依赖关系工作,而请求工作正常。因此,一种解决方案是在AWS中创建一个无服务器功能,然后将mongoDB针连接到AWS (mongoDB针可以连接到许多第三方服务,包括许多AWS云服务,如lambda、s3、kinesis等)。

AWS允许您上传任何外部依赖项,如果mongoDB缝合允许的话,我们将不需要lambda,但是缝合仍然需要很多支持。在我的例子中,我有一个节点函数,将cheerio和request作为外部依赖项,将其上传到lambda:创建一个帐户,创建新的lambda函数,并将节点模块和代码打包到一个zip文件中来上传它。你的拉链应该是这样的:

包含函数的文件应该如下所示:

代码语言:javascript
复制
    const cheerio = require("cheerio");
const request = require("request");

exports.rss = function(event, context, callback) {

  request(event.requestURL, function(error, response, body) {

    if (!error && response.statusCode == 200) {

      const $ = cheerio.load(body);
      const webpageTitle = $("title").text();
      const metaDescription = $("meta[name=description]").attr("content");
      const webpage = {
        title: webpageTitle,
        metaDescription: metaDescription
      };

      callback(null, webpage); 
      return webpage; 
    } else {
      callback(null, {message: "THIS IS AN ERROR"})
      return {message: "THIS IS AN ERROR"}; 

    }
  });
};

在mongoDB中,连接到第三方服务,选择AWS,输入使IAM用户获得的密钥。在规则->操作中,选择lambda作为您的API,并允许所有操作。现在,在您的mongoDB缝纫函数中,您可以连接到Lambda,在我的例子中,这个函数应该如下所示:

代码语言:javascript
复制
   exports = async function(requestURL) {
  const lambda = context.services.get('getTitleAtURL').lambda("us-east-1");

  const result = await lambda.Invoke({
    FunctionName: "getTitleAtURL",
    Payload: JSON.stringify({requestURL: requestURL})
  });

  console.log(result.Payload.text());
  return EJSON.parse(result.Payload.text());
};

注:这减慢了表演的时间,虽然通常需要两次额外的时间才能完成.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61281411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档