我正在尝试使用agenda创建和安排作业。所以我把它拆分为两个文件,一个是consumer创建作业的文件,另一个是producer调度作业的文件。
这是使用者文件
const Agenda = require("agenda");
async function run() {
try {
const agenda = new Agenda({
db: {
address: process.env.MONGODB_URL,
collection: 'agendaJobs',
options: {
useUnifiedTopology: true
}
}
});
agenda.define('ticket creation', async (job, done) => {
const { time } = job.attrs.data;
console.log(time);
done();
});
agenda.on("ready", function () {
agenda.start();
console.log('Agenda Started');
});
//await agenda.start();
} catch (error) {
console.error(error);
process.exit(-1);
}
}
module.exports = {
run: run
};而生产者文件是
//import { default as Agenda } from 'agenda';
const Agenda = require("agenda");
const jobs = async (job) => {
try {
const agenda = new Agenda({
db: {
address: process.env.MONGODB_URL,
collection: 'agendaJobs',
options: {
useUnifiedTopology: true
}
}
});
const created = await agenda.schedule(job.time, 'ticket creation', {
time: job.time
});
return created;
} catch (error) {
console.error(error);
process.exit(-1);
}
};
module.exports = jobs;这是我的控制器,我用它
const jobs = require('./producer');
const { run } = require('./consumer');
run();
app.post('/create/job', async (req, res) => {
try {
const { time } = req.body;
await jobs({
time: time
});
return res.status(200).send({
success: true,
message: 'Job created'
});
} catch (error) {
return res.status(error.status).send(error);
}
});是否有任何地方我错了,我知道这连接到数据库
发送到控制器的正文示例
{
"time": "3 minutes"
}我使用了节点调试器来跟踪错误,它总是在如下所示的行上失败,但我不知道是什么导致了它
yield schedule(this).save()然后在终端中显示一个错误
TypeError: Cannot read property 'insertOne' of undefined** this的props属性始终未定义
发布于 2021-05-27 00:44:24
https://github.com/agenda/agenda/issues/335#issuecomment-249154993
agenda.on("ready", async () => {
const created = await agenda.schedule(job.time, 'ticket creation', {
time: job.time
});
});https://stackoverflow.com/questions/67362460
复制相似问题