错误:评估失败:ReferenceError:未定义res

时间:2019-08-24 16:40:55

标签: javascript node.js express puppeteer

我在与操纵up的节点中遇到范围问题。我无法发送在puppeteer的评估对象中获得的内容,因为我得到了: 错误:评估失败:ReferenceError:未定义res 我需要帮助。

const express = require('express');
const path = require('path'); // NEW
const puppeteer = require('puppeteer');
const fs = require('fs');

const config = require('../src/config.js');
const app = express();
const port = process.env.PORT || 3006;
const DIST_DIR = path.join(__dirname, '../dist'); // NEW
const HTML_FILE = path.join(DIST_DIR, 'index.html'); // NEW

app.use(express.static(DIST_DIR)); // NEW
app.get('/api', (req, res) => {
  res.send(mockResponse);
});
app.get('/getapi', async (req, res) => {
  req.setTimeout(500000);

  var pal= req.query.palabra;
  function randomIntFromInterval(min, max) { // min and max included
    return Math.floor(Math.random() * (max - min + 1) + min);
  }

  const next_class = 'snByac';

      const browser = await puppeteer.launch({
      headless: false,
    });
      const page = await browser.newPage();

      await page.goto('https://adwords.google.com/ko/KeywordPlanner/Home?', {waitUntil: 'networkidle2'});
      await page.waitFor(randomIntFromInterval(10000,25000));
      await page.type('input[name=identifier]', config.mail);
      await page.click('span.' + next_class);
      await page.waitFor(randomIntFromInterval(20000,23000));
      await page.type('input[name=password]', config.password)
      await page.click('span.' + next_class)
      await page.waitFor(randomIntFromInterval(37000,45000));
      await page.click('[icon="arrow_forward"]')
      await page.waitFor(randomIntFromInterval(3800,6000));
      await page.type('[aria-autocomplete="list"]', pal)
      await page.waitFor(randomIntFromInterval(1400,2400));
      await page.keyboard.press('Enter');
      await page.waitFor(randomIntFromInterval(5000,14000));
      await page.keyboard.press('Enter');
      var hotelJson = {};
      await page.evaluate(() => {
      var hotelsElms = document.querySelectorAll('.keyword._ngcontent-vyt-82');
      hotelsElms.forEach((hotelelement) => {
       hotelJson.name = hotelelement.querySelector('span.keyword._ngcontent-vyt-82').innerText;
        });
      res.json(hotelJson);
});


        await browser.close();

});
app.get('/', (req, res) => {
 res.sendFile(HTML_FILE); // EDIT
});
app.listen(port, function () {
 console.log('App listening on port: ' + port);
});
//app.setTimeout(500000);

我也尝试过放置“ res.json(hotelJson);”在“评估”对象之外,但返回一个空的json,就好像无法在“评估”功能的范围内分配“ hotelJson”,然后将其还原为空,我试图用虚假数据填充它,并且还返回空的。

1 个答案:

答案 0 :(得分:1)

Official document-该方法返回一个Promise,它解析为pageFunction的返回值。

这意味着您可以在End Sub函数的“外部”中获取一个值。

evaluate