如何解决使用Bull,Puppeteer,NodeJS和Express进行报废作业
我最近在Heroku上建立了一个平台来托管Puppeteer剪贴脚本(Express,Node JS)。在脚本开始花费越来越长的时间之前,它一直很棒。对于Heroku的documentations,任何超过30秒的请求都会使请求超时,并且失败。
解决此问题的方法是使用Redis服务器(特别是使用npm模块Bull)。
我之前从未听说过排队,所以这对我自己是一个学习的机会。
下面是我当前的代码(有效)。
我将彻底帮助您完成该过程:
router.post(
"/get-data/:id",// route
ensureAuth,// ensure the person making the request is allowed to make the request in the first place
fsController.createFile,// creates a .js file where the script will be copied to
scrapperController.getData,// runs the function in the newly created .js file
csvController.buildCSVAndDeliver // adds that data to a csv file and downloads it
);
const Script = require("../models/Script");
const fs = require("fs");
exports.createFile = async (req,res,next) => {
try {
const script = await Script.findById({ _id: req.params.id });
let filename = `./scrapper/${script._id}.js`;
// While loop to check if file exists and to append a digit if it does.
let counter = 0;
while (fs.existsSync(filename)) {
filename = `./scrapper/${script._id}${counter}.js`;
counter++;
}
fs.writeFileSync(filename,script.script);
req.filename = filename;
next();
} catch (error) {
fs.unlink(filename);
res.send(error,"Please Try Again");
res.redirect('/dashboard')
}
};
- scrapperController接收该文件并执行
const fs = require("fs");
exports.getData = async (req,next) => {
try {
let scrapper = require(`.${req.filename}`);
const response = await scrapper(req.body);
req.response = response;
fs.unlinkSync(req.filename);
next();
} catch (error) {
res.send(error,"Please Try Again");
fs.unlinkSync(req.filename);
}
};
- 最后,下载了CSV文件
const fs = require("fs");
const { Parser } = require("json2csv");
exports.buildCSVAndDeliver = async (req,res) => {
let csvFile = `./csv/${req.params.id}.csv`;
try {
const parser = new Parser();
const csv = parser.parse(req.response);
fs.writeFileSync(csvFile,csv);
res.download(csvFile,function () {
fs.unlinkSync(csvFile);
});
} catch (error) {
console.log(error);
}
}
现在您知道该过程了,该在哪里添加排队代码?甚至可以使用这种代码结构吗?
谢谢,如果您需要我的其他信息,请随时询问。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。