我正在尝试使用软件包puppeteer
从网站上截取屏幕截图为此,我使用Express创建一个简单的服务器:
app.get('/requestScreenShootForDesktop/:id', function(req, res){
(async () => {
const pathUpload = 'uploads/' + Math.floor(Date.now() / 1000) + '.png';
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(this.req.params.id);
await page.setViewport({width: 1920, height: 1080});
await page.screenshot({path: pathUpload});
await browser.close();
await res.send({msg: 'ScreenShot Ok'});
})();
});
此代码的问题在第await page.goto(this.req.params.id);
行,Node说:
无法读取未定义的属性“ params”
这是因为属于函数req
的变量app.get
在异步作用域中不存在。
如何解决此问题,并将变量传递给异步函数?
答案 0 :(得分:1)
只要抛开IIFE,就不要使用this
访问req
app.get('/requestScreenShootForDesktop/:id', async function(req, res){
const pathUpload = 'uploads/' + Math.floor(Date.now() / 1000) + '.png';
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(req.params.id);
await page.setViewport({width: 1920, height: 1080});
await page.screenshot({path: pathUpload});
await browser.close();
res.send({msg: 'ScreenShot Ok'});
});
答案 1 :(得分:0)
(async (req, res) => {
const pathUpload = 'uploads/' + Math.floor(Date.now() / 1000) + '.png';
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(req.params.id);
await page.setViewport({width: 1920, height: 1080});
await page.screenshot({path: pathUpload});
await browser.close();
await res.send({msg: 'ScreenShot Ok'});
})(req, res);
答案 2 :(得分:0)
您可以保留IIFE,但删除this
关键字