将Meteor与node-celery一起使用会导致错误"无法读取属性' slice' of null"

时间:2017-04-30 16:42:14

标签: javascript node.js meteor celery

Github repo for reproducing problem 运行localhost:3000以触发问题。

我正在使用Meteor 1.4.4.1服务器端的node-celery npm软件包。当Meteor启动时,客户端会自动调用Meteor方法estimates.request,该方法会触发服务器将任务编入队列:

的客户机/ main.js

Meteor.startup(() => {
    Meteor.call('estimates.request', function(err) {
        console.log('ok')
    })
});

触发Meteor方法:

进口/ API / Estimates.js

Meteor.methods({
    'estimates.request'() {
        console.log('estimates.request called');

        // Create Celery client
        var celery = require('node-celery')
        var client = celery.createClient({
            CELERY_BROKER_URL: 'amqp://192.168.1.26:5672//',
            CELERY_RESULT_BACKEND: 'amqp'
        });

        // Queue task on connect
        client.on('connect', function() {
            console.log('connected');
            start_latitude = 1.3053947
            start_longitude = 103.8273045
            client.call('proj.tasks.getPriceEstimates', [start_latitude, start_longitude],
                function(result) {
                    console.log('result: ', result);
                    client.end();
                })
        });
    }
});

发生以下错误:

Exception while invoking method 'estimates.request' TypeError: Cannot read property 'slice' of null

问题:导致此错误的原因是什么?

Github repo for reproducing problem 运行localhost:3000以触发问题。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,节点芹菜文档中出现了错误。选项CELERY_RESULT_BACKEND输入错误。

您应该像这样设置此选项:

CELERY_RESULT_BACKEND: 'amqp://'它应该有用。

Celery读取一个url并对协议进行切片,所以如果你通过amqp芹菜会抛出异常。