如何解决如何从另一个执行上下文中获取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' });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。