如何从另一个执行上下文中获取Nodejs中的数据

问题描述

无论何时更改,我都希望从网站获取数据。对于这种情况,我使用MutateObservable。 作为刮板程序,我使用Puppeteer,因为数据每秒更改一次。为此,我需要一个永久打开的浏览器。

作为服务器,我使用Nodejs。也许有人可以告诉我如何解决该问题并将Puppeteer中的数据获取到我的nodejs执行上下文中。

app.js

const express = require('express')
const cors = require('cors')
const scraping = require('./scraper.js')

const port = process.env.PORT || 2099
console.log(`Der Server läuft auf Port ${port}`);

const app = express();
app.use(cors());

app.listen(port);

let plane = new scraping('3e0f90');
plane.startTracking();

console.log('Url: ',heli.getUrl());

scraper.js

const puppeteer = require('puppeteer');

class Scraper {

    constructor(icao) {
        this.icao = icao;
        this.url = `https://tar1090.adsbexchange.com/?icao=${this.icao}`;
    }

    getUrl() {
        return this.url;
    }

    async startTracking() {

        const browser = await puppeteer.launch({ headless: false });
        const page = await browser.newPage();
        await page.goto(this.url,{ waitUntil: 'networkidle0' });

        await page.evaluate(page => {

            var speedNode = document.querySelector('#selected_speed1');
            var ob = new MutationObserver(mutation => {
                var speedValue = mutation[0].speedNode.innerText;
                console.log(speedValue);
            });

            var config = { childList: true }
            ob.observe(speedNode,config);
            // And now the callback in line 26 is always fired if the data changes.
            // How do I get them into my node execution context ? I want to save them in a database.
        });
    }    
}

module.exports = Scraper;

解决方法

一种选择是通过这种方式:您可以从app.js运行scraper.js,然后将任何数据发送到子进程

scraper.js

const { fork } = require('child_process');
const forked = fork('app.js');

// Set forked process event listener
// and receive messages from child
forked.on('message',(msg) => {
  console.log('Message from child',msg);
});

//
// Your code here
// ...
// And when you need to pass some data
// to your child process,send it like this
forked.send({ hello: 'son' });

app.js

// Set process event listener and
// receive data like this
process.on('message',(msg) => {
  console.log('Message from parent:',msg);
});

// If you need to send something to
// parent process,do it same way
process.send({ hello: 'daddy' });

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...