javascript - 无法在 express 中运行异步函数,如何解决?
问题描述
异步函数不在 express 视图、控制台日志、函数之前和之后运行,单独的代码工作,但 express 不运行。
const path = require('path')
const fs = require('fs')
const puppeteer = require('puppeteer');
const express = require('express');
const bodyParser = require('body-parser');
const app = express()
const port = 9596;
app.use(bodyParser.json());
app.post('/', async function(req, res){
siteName = req.body.siteName;
links = req.body.links;
screenshotPageSource = req.body.screenshotPageSource;
await createScreenshots(siteName, links, screenshotPageSource);
res.end('Hello World!');
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
async function createScreenshots(siteName, links, screenshotPageSource){
const browser = await puppeteer.launch({defaultViewport: { width: 1366, height: 768 }});
const page = await browser.newPage();
linksLength = links.Length;
for (var i = 0; i < linksLength; i++) {
link = links[i]
if(screenshotPageSource){
currentLink = `view-source:${link}`;
} else {
currentLink = link;
}
pageNumber = i + 1;
console.log(pageNumber);
await page.goto(currentLink, {waitUntil: 'load', timeout: 60000}).then(() => {
console.log(`Страница ${pageNumber}/${linksLength}, удалось сделать скриншот.`)
}).catch((res) => {
console.log(`Страница ${pageNumber}/${linksLength}, не удалось сделать скриншот.`)
});
await page.screenshot({ path: `${siteName}__${pageNumber}.png` });
}
await browser.close();
return links;
};
看起来您的帖子主要是代码;请添加更多详细信息。看起来您的帖子主要是代码;请添加更多详细信息。看起来您的帖子主要是代码;请添加更多细节。
解决方案
我猜的问题在app.post
.
下面添加了一个代码供您参考,这可能有助于您编辑代码。
app.post('/', async(req, res, next) => {
const { error } = validateBody(req.body);
if (error) {
return res.status(400).send(error.details[0].message);
}
const newData= new createScreenshots({
siteName = req.body.siteName;
links = req.body.links;
screenshotPageSource = req.body.screenshotPageSource; });
await newData.save();
console.log('saving the document');
res.send(newData);
})
以上代码仅供您参考如何编写app.post()
推荐阅读
- wifi - 如何使用 NL80211_BSS_CAPABILITY 获取扫描网络的 WiFi 安全密钥(WPA、WPA2、ESS)?
- javascript - 在我的文件夹中找不到模块 (discord.js)
- flutter - 如何像 MX Player 那样检测颤动的音频文件夹?
- django-rest-framework - 通过 Celery 任务调用 DRF ViewSet
- php - 数据不通过管理页面中的 ajax 和 jQuery 插入和更新?
- unicode - 如何使用 Arduino IDE 在 Adafruit SSD1306 上显示 Unicode 字符?
- microsoft-graph-api - 从 Exchange 网络服务迁移到 Graph Api
- heroku - 将信用卡添加到 Heroku
- javascript - 如何消除 React js 应用程序中的渲染阻塞资源?
- selenium - 具有多个空格的 Selenium 文本检索