NodeJs app" hanging"或者"冷冻"每当发生错误时

时间:2018-05-25 22:56:54

标签: javascript node.js server

当我向我的nodejs服务器发出多个post请求并且所有参数都正确时,一切正常(并且没有冻结)但是当我使用不正确的参数发出多个post请求时会出错,我的nodejs服务器只是冻结/挂了几分钟。这是为什么?

这是我的代码btw

var btn = document.getElementById("btn")

btn.addEventListener("click", function(){

  // Check if element contains disabled class
  if (btn.classList.contains("disabled")) {
    // Removes disabled class
    btn.classList.remove("disabled");

    // Adds waves-effect and waves-light classes
    btn.classList.add("waves-effect", "waves-light"); 
  }

});

3 个答案:

答案 0 :(得分:4)

遇到错误时,您的节点服务器不知道除console.log()错误之外的其他操作。它需要结束该请求并发送一些响应。当你陷入困境时,你可以res.status(400).send({ error: err })

答案 1 :(得分:0)

确保每次在您的请求中调用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()。见Must res.end() be called in express with node.js?

答案 2 :(得分:0)

除了其他答案之外,如果任何服务在一段时间内无法响应,您可以为超时添加中间件,例如

var timeout = require('connect-timeout');
app.use(timeout('5s'));