多次请求自定义后 Nodejs 页面冻结 API

Nodejs page freezes after multple requests to Custom API

我遇到的问题是,当我多次按下“提交”按钮时,我的应用程序只提交了一个 1,它冻结了,一段时间后(大约 1000.000 毫秒),它 returns 最后一个请求在控制台和玉页。表单中的提交按钮 returns 和 post 并将其发送到同一页面。该按钮还可以刷新页面。重要的是页面 returns (JSON) post 到页面并且有另一个 json 请求将它发送到 API(并且returns 到同一页)

app.js

var options_search = {
    hostname: 'host',
    path: 'path',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Content-Length': JSON request .length,
    }
};

app.post('/result',function(req,response){

    var keyword=req.body.user;


    GLOBAL.objToJson ={ keyword };
    response.write(JSON.stringify(GLOBAL.objToJson));

    console.log("test " +JSON.stringify(GLOBAL.objToJson) );

});



app.get('/Search', function(req, res) {

    var req = http.request(options_search,  (resb) => {

        var buffer_search = "";
        resb.setEncoding('utf8');

        resb.on('data', (chunks) => {
            buffer_search += chunks;
        });
        resb.on('end', () => {

            res.render('Search',{
                title: 'Search',
                value_search: buffer_search,
                search_test: [JSON.stringify(GLOBAL.objToJson) ]
            });
        });
       });

    //res.redirect("/search");
    req.write(search);

});

search.jade

doctype html
html
    head
    script(src='//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js')
    script.
        $(document).ready(function(){
            var user,pass;
            $("#submit").click(function(){
                user=$("#user").val();
                pass=$("#password").val();
                $.post("http://localhost:3000/result",{user: user}, function(data){
                    if(data==='done')
                    {
                        alert("login success");
                    }

                });


            });
        });


        input#user(type='TEXT', size='40')
        br
        input#submit(type='button', value='Submit',onclick="location.href='search'")

result 路由中,您正在使用底层 HTTP .write() 方法来响应客户端。然而,这并没有结束连接,连接将保持打开状态,期待更多的东西被写入客户端。

如果您要发送字符串,您应该使用 .send(),因为这会将字符串写入 HTTP 流并结束响应。

您可能还想考虑不将对象字符串化为 JSON 字符串,而只使用 .json() 代替。所以代码行

response.write(JSON.stringify(GLOBAL.objToJson));

变成

response.json(GLOBAL.objToJson);