Javascript 与木偶师擦肩而过

Javascript 与木偶师擦肩而过,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我正在尝试创建一个需要用户提供URL的节点应用程序,然后将URL传递到scrape.js,并使用puppeter,刮取某些字段,然后以json格式将数据传递回app.js(这样我就可以将其转换为文档)。但我收到的是整个ServerResponse,而不是我想要的json格式的数据 我希望有更多经验的人能给我一些启示。以下是我到目前为止的情况: // app.js const scrape = require('./scrape'); const router = express.Router(

我正在尝试创建一个需要用户提供URL的节点应用程序,然后将URL传递到
scrape.js
,并使用puppeter,刮取某些字段,然后以json格式将数据传递回
app.js
(这样我就可以将其转换为文档)。但我收到的是整个ServerResponse,而不是我想要的json格式的数据

我希望有更多经验的人能给我一些启示。以下是我到目前为止的情况:

// app.js

const scrape = require('./scrape');
const router = express.Router();

router.get( '/', ( req, res ) => {
    const url = req.body.url;

    const item = new Promise((resolve, reject) => {
        scrape
            .scrapeData()
            .then((data) => res.json(data))
            .catch(err => reject('Scraping failed...'))
   })
});

您有命名问题
scrape.js
正在导出
scrapeData
函数。在该函数中,您声明了一个
scrapedata
变量,这是不同的

您在此处放置:

console.dir(scrapeData)-成功记录数据。


这应该可以解决您的问题。

您有命名问题
scrape.js
正在导出
scrapeData
函数。在该函数中,您声明了一个
scrapedata
变量,这是不同的

您在此处放置:

console.dir(scrapeData)-成功记录数据。


这应该可以解决您的问题。

由于缩进,很难理解。但是有没有可能
scrapeData
函数没有返回任何内容?@hardkoded,谢谢你的回复!我可以通过控制台将scrapeData记录在
scrape.js
中来验证它是否返回数据。等一下,我来看看我能不能给沙盒编码一个例子!lmao,没关系-直到你不能在codesandbox上使用木偶演员。因为缩进,很难理解。但是有没有可能
scrapeData
函数没有返回任何内容?@hardkoded,谢谢你的回复!我可以通过控制台将scrapeData记录在
scrape.js
中来验证它是否返回数据。等一下,我来看看我能不能给沙盒编码一个例子!洛芒,没关系-直到你不能在暗箱里使用木偶演员。
// scrape.js

const puppeteer = require('puppeteer');

const scrapeData = async () => {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();
    await page.setViewport({ width: 360, height: 640 });
    await page.goto(url);

    let scrapedData = await page.evaluate(() => {
    let scrapedDetails = [];

    let elements = document.querySelectorAll('#a-page');

    elements.forEach(element => {
      let detailsJson = {};

      try {
        detailsJson.title = element.querySelector('h1#title').innerText;
        detailsJson.desc = element.querySelector('#description_box').innerText;
      } catch (exception) {}

    scrapedDetails.push(detailsJson);
  });

  return scrapedDetails;
  }));

  // console.dir(scrapeData) - logs the data successfully.

};

module.exports.scrapeData = scrapeData
return scrapeData;