Javascript NodeJs应用程序;悬挂;或;冻结“;每当发生错误时

Javascript NodeJs应用程序;悬挂;或;冻结“;每当发生错误时,javascript,node.js,server,Javascript,Node.js,Server,当我向我的nodejs服务器发出多个post请求并且所有参数都正确时,一切正常(并且不会冻结),但当我发出多个post请求且参数错误时,我的nodejs服务器只会冻结/挂起几分钟。为什么会这样 这是我的代码顺便说一句 app.post('/pushtransaction', function(req, res) { console.log(req.body); console.log(5); if (req.body.sigs) { let sigver

当我向我的nodejs服务器发出多个post请求并且所有参数都正确时,一切正常(并且不会冻结),但当我发出多个post请求且参数错误时,我的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)
        });
    }
})
确保每次在请求中调用
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.send()
,则不必调用
res.end()
。请参阅确保每次在请求中调用
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.send()
,则不必调用
res.end()
。请参见

当遇到错误时,节点服务器除了
console.log()
错误之外不知道该做什么。它需要结束该请求并发送一些响应。当您在捕获范围内时,可以
res.status(400).发送({error:err})

当遇到错误时,您的节点服务器除了
console.log()
错误之外不知道该做什么。它需要结束该请求并发送一些响应。您可以
res.status(400).send({error:err})
当您在捕获范围内时。

添加到其他答案中,如果任何服务在某个时间内无法响应,您可以添加超时中间件,如

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

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

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

你发出了多少次“多次发帖请求”。Javascript处理错误的速度自然比无错误代码慢,所以这可能是问题的一部分。Javascript处理错误的速度自然比无错误代码慢,因此这可能是问题的一部分。