如何在 node.js 和 nightmare.js 范围之外使用变量(网络抓取)
How to use a variable outside of its scope in node.js and nightmare.js (web scraping)
如何在 node.js 和 nightmare.js(网络抓取)中使用超出其范围的变量
当我尝试在等待范围之外使用变量 'downloadLink' 时,它 returns 未定义。
app.post('/search', function(req, res){
const val = req.body.searchText;
const nightmare = new Nightmare({
show: true
});
(async function() {
const downloadLink = await nightmare
.viewport(1200, 700)
.goto('https://google.com/')
.insert('#selector0')
.click('#selector1')
.click('#selector2')
.evaluate(() => document.querySelector('#selector3').href)
.end()
.catch((err) => {
console.log(err)
})
console.log('download link ' + downloadLink) //this line prints a string
})();
console.log('download link ' + downloadLink) //this line returns undefined
})
我可以在其范围之外使用 'downloadLink' 并使用后一行代码打印它吗??
Express 支持异步处理程序,因此您可以像这样重构您的方法。无需将代码放在异步 IIFE 下。
app.post('/search', async function(req, res){
try {
const val = req.body.searchText;
const nightmare = new Nightmare({
show: true
});
const downloadLink = await nightmare
.viewport(1200, 700)
.goto('https://google.com/')
.insert('#selector0')
.click('#selector1')
.click('#selector2')
.evaluate(() => document.querySelector('#selector3').href)
.end()
console.log('download link ' + downloadLink);
} catch (err) {
console.error(err.message);
}
});
如何在 node.js 和 nightmare.js(网络抓取)中使用超出其范围的变量
当我尝试在等待范围之外使用变量 'downloadLink' 时,它 returns 未定义。
app.post('/search', function(req, res){
const val = req.body.searchText;
const nightmare = new Nightmare({
show: true
});
(async function() {
const downloadLink = await nightmare
.viewport(1200, 700)
.goto('https://google.com/')
.insert('#selector0')
.click('#selector1')
.click('#selector2')
.evaluate(() => document.querySelector('#selector3').href)
.end()
.catch((err) => {
console.log(err)
})
console.log('download link ' + downloadLink) //this line prints a string
})();
console.log('download link ' + downloadLink) //this line returns undefined
})
我可以在其范围之外使用 'downloadLink' 并使用后一行代码打印它吗??
Express 支持异步处理程序,因此您可以像这样重构您的方法。无需将代码放在异步 IIFE 下。
app.post('/search', async function(req, res){
try {
const val = req.body.searchText;
const nightmare = new Nightmare({
show: true
});
const downloadLink = await nightmare
.viewport(1200, 700)
.goto('https://google.com/')
.insert('#selector0')
.click('#selector1')
.click('#selector2')
.evaluate(() => document.querySelector('#selector3').href)
.end()
console.log('download link ' + downloadLink);
} catch (err) {
console.error(err.message);
}
});