javascript - Wann sollte res.end() auf dem NodeJS-Server verwendet werden?
伊谢尔伦
伊谢尔伦 2017-05-17 09:56:21
0
2
488

Es gibt ein Szenario, in dem vom Benutzer übermittelte Daten über die Route „/blog“ verarbeitet werden müssen.
Angenommen, drei Daten müssen in drei Schlüsseln gespeichert werden, und dann sieht der Code so aus

function handlePostBlog(req, res){
    resid_client.set( key1, data1, function(err, response){
        resid_client.set(key2, data2, function(err,response){
            resid_client.set(key3, data3, function(err, response){
                if(response === 'ok'){
                    res.writeHead(200, ...)
                    res.end()
                }
            })
        })
    })
}

Es ist mir egal, ob es gut aussieht oder nicht. . Obwohl es mit Versprechen besser verpackt aussieht, gibt es ein Problem mit res.end() im letzten Rückruf zum Schließen der Verbindung? Wird dieser Antrag noch lange anhängig sein? Wie sollen wir mit so einem Ort umgehen? Da Sie das Ergebnis nur festlegen und nicht an den Benutzer zurückgeben müssen, können Sie die Verbindung nach Erhalt der Anfrage einfach direkt mit res.end() schließen?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

Antworte allen(2)
为情所困

这取决于你是否希望这个 HTTP 请求的返回结果与数据库操作的结果有关联性,以及用户交互设计是否容忍这个操作所花费的时间。

你在设计这个 '/blog' 接口时,需要明确指明 HTTP 返回 200 意味着什么。如果你们的业务场景只关心数据交付到后端,不关心后端是否正确存储到数据库,那肯定可以直接结束掉 HTTP 请求。如果你们希望终端用户得到这个确切的提交结果,那需要考虑交互层面了,设计良好的交互效果,2-6秒的等待,用户体验不会很差(指AJAX请求场景下,打开新页面场景下还是慎重)。写三次redis几乎是不花时间,比起 HTTP 请求本身的链路延迟根本不算什么。

具体业务场景还要具体分析。碰到特别耗时的操作,前端提交操作请求后轮训结果也不失为一种解决方案。

曾经蜡笔没有小新

看页面显示和数据库操作结果有没有相关性。如果有相关性,可以等待数据库操作结束之后返回。也可以做成异步队列的方式直接返回,成功后在推送结果。最终怎么样,还是看你需求。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!