我正在尝试从Firebase函数中使用NightmareJS进行抓取。这是我的代码(最少的可验证示例)
const functions = require('firebase-functions');
const admin = require('firebase-admin')
admin.initializeApp()
const Nightmare = require('nightmare');
exports.helloWorld = functions.https.onRequest((request, response) => {
const nightmare = Nightmare()
return nightmare.goto('https://apple.com')
.end()
.then(function() {
console.log('success')
response.status(200).send("Script successfully completed")
})
.catch(function(data) {
console.log('error')
response.status(400).send('something went wrong' + data)
})
})
当我在本地测试该功能时,此代码可以正常工作。脚本访问页面,然后触发then()
子句。但是,如果我部署并触发该函数,它将到达nightmare.goto
行,然后停顿。它不会引发错误(如果发生错误,将被catch子句捕获,并且我将得到响应)。相反,它会在60秒后超时。那里发生了什么事?
要为不熟悉nightmareJS的人解释,end()
将噩梦呼叫链变成了一个承诺。同样,该代码在本地运行良好,这是最大的提示。我认为这可能与以下事实有关:firebase不允许免费计划中的出站流量,但是在升级后大发雷霆,问题仍然存在:(