Тайм-аут обратной связи (нет ответа от сервера) при выполнении запроса на потребление времени

У меня есть запрос, который обрабатывает тысячи данных. Поэтому иногда для завершения требуется более 5 минут.

Но, к сожалению, петля возвращает тайм-аут (нет ответа от сервера) до завершения процесса.

В запросе nodejs. Вы можете удалить время ожидания запроса для конкретного запроса с помощью приведенного ниже кода.

request.setTimeout(0)

Может ли кто-нибудь сказать мне, как я могу сделать это для обратной петли удаленный метод?


person Ankur Akvaliya    schedule 08.12.2017    source источник


Ответы (2)


Тогда это было довольно легко.

Все, что мне нужно было сделать, это передать http req object в моем удаленном методе, а затем установить время ожидания равным 0.

 Visit.remoteMethod(
        'caculateDistance',
        {
            description: 'Calculate distance from beacon using rssi',
            accepts: [
                { arg: "req", type: "object", http: { source: "req" } },
                { arg: 'activationId', type: 'string', required: true }
            returns: { arg: 'data', type: 'Object', root: true },
            http: { verb: 'patch', path: '/:activationId/calculate-distance' },
        }
    );


Visit.caculateDistance = function (httpReq, activationId, callbackFn) {
        httpReq.setTimeout(0);
        /////calculations....
});

Спасибо, в любом случае!

person Ankur Akvaliya    schedule 11.12.2017

Я не совсем уверен в этом, но вы можете попробовать, я чувствую, что это может сработать.

Вы можете создать перехватчик для этого конкретного маршрута или всех маршрутов в файле server.js.

app.all('/api/*', function(req, res, next){
    request.setTimeout(0); // this is the statement and pass it to the next middle ware func.
    next();
});

Если нет, вы также можете использовать удаленный метод для этого маршрута и добавить его туда.

Обновить

Если вы хотите это для одного API, просто используйте

app.all('<exact api path>', function(req, res, next){
    request.setTimeout(0); // this is the statement and pass it to the next middle ware func.
    next();
});
person Rahul Singh    schedule 08.12.2017
comment
Спасибо за предложение, но мне нужно ti только для одного API. Это не должно влиять ни на что другое. - person Ankur Akvaliya; 11.12.2017
comment
@AnkurAkvaliya, тогда вы можете просто использовать удаленный метод того же или лучшего из app.all('pass your api path'), это будет работать только для этого API. - person Rahul Singh; 11.12.2017