首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Agenda无法读取未定义的属性insertOne

Agenda无法读取未定义的属性insertOne
EN

Stack Overflow用户
提问于 2021-05-03 09:10:45
回答 1查看 176关注 0票数 0

我正在尝试使用agenda创建和安排作业。所以我把它拆分为两个文件,一个是consumer创建作业的文件,另一个是producer调度作业的文件。

这是使用者文件

代码语言:javascript
复制
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
};

而生产者文件是

代码语言:javascript
复制
//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;

这是我的控制器,我用它

代码语言:javascript
复制
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);
    }
});

是否有任何地方我错了,我知道这连接到数据库

发送到控制器的正文示例

代码语言:javascript
复制
{
    "time": "3 minutes"
}

我使用了节点调试器来跟踪错误,它总是在如下所示的行上失败,但我不知道是什么导致了它

代码语言:javascript
复制
yield schedule(this).save()

然后在终端中显示一个错误

代码语言:javascript
复制
TypeError: Cannot read property 'insertOne' of undefined

** this的props属性始终未定义

EN

回答 1

Stack Overflow用户

发布于 2021-05-27 00:44:24

https://github.com/agenda/agenda/issues/335#issuecomment-249154993

代码语言:javascript
复制
        agenda.on("ready", async () => {
             const created = await agenda.schedule(job.time, 'ticket creation', {
                time: job.time
             });
        });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67362460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档