将请求对象添加到 Kue 作业

Adding req object to Kue job

一直在网上搜索,试图找到以下内容为何不起作用的答案。

我试图在添加作业时传入 req 对象,以便在处理作业时可以访问它。

但是当整个 req 对象传递给 job.data 时,该过程永远不会执行。但是我可以传递 req 对象的一部分。

我正在尝试做的可能是反模式和一个很大的否定。但是,我试图理解为什么它不起作用。它继续没有任何错误似乎很奇怪。

下面是一个例子,希望大家看得清楚。

我的kue被抽象成一个单独的文件,并初始化到app.locals.Q如下:

// Q.js

class Q {
    constructor(options) {
        this.q = kue.createQueue(options)
    }

    addJob = (name, data) => {
    return Queue.create({
        queue_job: name,
        queue_route: data.route,
        queue_user: data.user,
        queue_added: new Date(),
    })
        .then(response => {
            this.q.create(name, {
                id: response.get('queue_id'),
                route: data.route,
                request: data.request
            })
                .save();
            return Promise.resolve(response);
        })
        .catch(error => {
            return Promise.reject(error);
        });

    processJob = (name, work, options = {}) => {
    const {concurrency} = options;
    this.q.process(name, concurrency || 1, (job, done) => {
        const {data: {id, route, request}} = job;
        Queue.update({
            queue_running: true
        }, {
            where: {
                queue_id: id
            }
        })
            .then(() => {
                if (process.env.NODE_ENV !== 'production') {
                    console.log(`running job ${id} from ${route}`);
                }
                return new Promise((resolve, reject) => {
                    return work(resolve, reject, request);
                });
            })
            .then(results => {
                return Queue.update({
                    queue_running: false,
                    queue_completed: new Date(),
                    queue_results_path: results || null
                }, {
                    where: {
                        queue_id: job.data.id
                    }
                });
            })
            .then(() => {
                if (process.env.NODE_ENV !== 'production') {
                    console.log(`completed job ${id} from ${route}`);
                }
                done();
            })
            .catch((error) => {
                if (process.env.NODE_ENV !== 'production') {
                    console.log(`failed job ${id} from ${route}`);
                    console.log(error);
                }
                Queue.update({
                    queue_running: false,
                    queue_error: `${error}`

                }, {
                    where: {
                        queue_id: id
                    }
                })
                    .then(() => {
                        done(error);
                    })
                    .catch(err => {
                        console.error(err);
                        done(err);
                    });
            });
        });
    };

};
// example route

queue = (req, res) => {
    const {locals: {Q}} = req.app;
    Q.addJob('foo', {
            route: req.path,
            user: req.user.get('username'),
            request: req
        })
        .then(queue_id => {
                Q.processJob('foo', (resolve, reject, request) => {
                        console.log(request)
                        resolve('complete')
                    })
                res.json({sucess: true})
            }) 
        }

redis 无法序列化请求对象。

kue 只是默默地失败了。