javascript - 如何更改 CATCH 块内的页面(Node.js 和 Express)?
问题描述
我在下面有这个小代码,它会转到 IMDB 网站来抓取电影标题。catch
对于基本错误处理,该代码实际上可以正常工作。
app.get("/", function(err, req, res){
function handleError(err) {
console.log('Ohhhh nooo');
console.log(err.message);
}
(async ()=>{
let movieURL= "https://www.ximdb.com/title/tt1375666/?ref_=hm_tpks_tt_i_1_pd_tp1_cp";
let browser = await puppeteer.launch();
let page = await browser.newPage();
await page.goto(movieURL, {waitUntil: "networkidle2"});
const movieData = await page.evaluate(() => {
let movieTitle = document.querySelector('div[class="TitleBlock__TitleContainer-sc-1nlhx7j-1 jxsVNt"] > h1').innerText;
let movieRating = document.querySelector('span[class="AggregateRatingButton__RatingScore-sc-1ll29m0-1 iTLWoV"]').innerText;
return{movieTitle, movieRating}
});
res.render("index2", {movieData});
console.log(movieData);
await browser.close();
return;
})()
.catch(handleError);
});
我故意将 IMDB 更改为“ximdb”以防出错。当我启动此脚本时,控制台会记录错误消息。然而,
- 浏览器上的加载标志不会停止。发生错误时如何停止脚本/加载?
- 我希望在发生错误时更改浏览器上的页面。下面的代码是我想要做的,但它不起作用并且它给出了错误(
(node:696) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'render' of undefined
)。
function handleError(err, res) {
console.log('Ohhhh nooo');
console.log(err.message);
res.render("index2");
}
解决方案
将你的捕获添加到 page.evaluate 承诺中,目前它在那里出错并且 res.render 永远不会被调用。
const movieData = await page.evaluate(() => {
let movieTitle = document.querySelector('div[class="TitleBlock__TitleContainer-sc-1nlhx7j-1 jxsVNt"] > h1').innerText;
let movieRating = document.querySelector('span[class="AggregateRatingButton__RatingScore-sc-1ll29m0-1 iTLWoV"]').innerText;
return{movieTitle, movieRating}
}).catch(err => {
console.log('error', err);
res.render(some error page);
})
由于没有电影数据,您现有页面的渲染可能无法正常工作。
推荐阅读
- testing - 如何将节点 ENV 值注入 Testcafe Studio 测试
- java - 我可以使用什么协议进行连接?
- sql - 从 Visual Studio 报表的查询结果创建文本子字符串
- r - 从闪亮的应用程序上传多个文件到谷歌驱动器
- discord.py - 使用 Discord.py 将 MP4 上传为 GIF(就像 TenorGIF 一样)?
- python-3.x - 如何告诉 asyncio.Protocol 一些信息?
- python - 如何记录在 Python 脚本中执行的所有 Redis 命令?
- javascript - Angular 11 HTML模板到Angular
- java - 如何确定android设备的速度
- php - 条带手动确认 + 连接帐户失败(confirmation_method + stripe_account)