如何将参数传递给NodeJS中的异步函数?

时间:2019-04-28 14:28:28

标签: javascript node.js async.js

我正在尝试使用软件包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在异步作用域中不存在。

如何解决此问题,并将变量传递给异步函数?

3 个答案:

答案 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关键字

相关问题