Приложение NodeJs «зависает» или «зависает» при возникновении ошибки - PullRequest
0 голосов
/ 26 мая 2018

Когда я делаю несколько запросов на публикацию на свой сервер nodejs и все параметры верны, все работает нормально (и не останавливается), но когда я делаю несколько запросов на публикацию с неверными параметрами, что приводит к ошибке, мой сервер nodejs просто зависает /виснет на несколько минут.Почему это?

Вот мой код между прочим

app.post('/pushtransaction', function(req, res) {
    console.log(req.body);
    console.log(5);
    if (req.body.sigs) {
        let sigver = xmf.modules.ecc.Signature.from(req.body.sigs).toString();
        let lasig = [sigver];
        console.log(req.body.packedTr);
        let transi = JSON.parse(req.body.packedTr);

        //let sigver = req.body.sigs;
        let package = {
            compression: 'none',
            transaction: transi,
            signatures: lasig
        }

        console.log(package);
        //Pushes tx in correct format
        xmf.pushTransaction(package).then(result=>{
            res.send(result);
            res.end();
            console.log(result);
        }).catch(err => {
            console.log(err)
        });
    }
})

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

При обнаружении вашей ошибки ваш Node-сервер не знает, что делать, кроме console.log() ошибки.Необходимо завершить этот запрос и отправить ответ.Вы можете res.status(400).send({ error: err }), когда вы в пределах улова.

0 голосов
/ 26 мая 2018

Добавляя к другим ответам, вы можете добавить промежуточное ПО для тайм-аутов, если какой-либо сервис не отвечает через какое-то время, например

var timeout = require('connect-timeout');
app.use(timeout('5s'));
0 голосов
/ 26 мая 2018

Убедитесь, что метод res.send() вызывается каждый раз в вашем запросе.

Обновлен Javascript:

app.post('/pushtransaction', function(req, res) {
    console.log(req.body);
    console.log(5);
    if (req.body.sigs) {
        let sigver = xmf.modules.ecc.Signature.from(req.body.sigs).toString();
        let lasig = [sigver];
        console.log(req.body.packedTr);
        let transi = JSON.parse(req.body.packedTr);

        //let sigver = req.body.sigs;
        let package = {
            compression: 'none',
            transaction: transi,
            signatures: lasig
        }

        console.log(package);
        //Pushes tx in correct format
        xmf.pushTransaction(package).then(result=>{
            res.send(result);
            res.end();
            console.log(result);
        }).catch(err => {
            console.log(err);
            res.status(400).send();
        });
    }

    res.status(400).send();
})

Кроме того, вам не нужно звонить res.end(), если вы звоните res.send().смотри Должен ли res.end () вызываться в экспрессе с помощью node.js?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...