我有一个包含模块puppeteer的server.js文件。
const puppeteer = require('puppeteer');
我想在使用该模块的routes.js中运行一个函数。
async function getPic(arg) {
const browser = await puppeteer.launch(/*{headless: false}*/);
const page = await browser.newPage();
await page.goto(arg);
await page.setViewport({width: 1000, height: 500})
await page.screenshot({path: 'pic.png'});
await broswer.close();
}
当我尝试运行它时,它不起作用,因为“没有定义木偶操纵者。”
那么解决这个问题的最佳方法是什么? 显然,我不能在routes.js中重新输入puppeteer模块 那么我在routes.js中包含server.js文件吗?或者这可能会导致模块,变量和函数被实例化两次? (有一次,当server.js运行时 - 因为它是起点,有一次是routes.js运行并重新运行server.js)
答案 0 :(得分:4)
在routes.js中写const puppeteer = require('puppeteer');
,这就是Node.js的工作方式。每个模块的行为都像单例,它首先执行,然后保存到内存中。接下来只需返回指向此内存的指针(因此需要来自server.js的puppeteer,routes.js将指向同一个对象)。
答案 1 :(得分:-1)
需要server.js中的模块
const puppeteer = require('puppeteer');
你必须在server.js中要求你的route.js文件,如下所述
require('./app/routes.js')(puppeteer);