最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何在node.js中为单个请求返回2个响应

IT培训 admin 6浏览 0评论

如何在node.js中为单个请求返回2个响应

我的节点应用程序很简单,对于查询mysql数据库中总客户的请求,我使用await进行了块调用,以等待查询完成。问题是它每秒只能处理约75个请求,太低了。

因此,每当我收到请求时,我都尝试返回200,告诉呼叫者我收到请求。准备好后返回查询结果,mysql查询可能需要一段时间。

但尚未为我工作,这是代码:

路由器:

router.get('', controller.getCustomers);

控制器:

const getCusomers = (req, res) => {
    try {
        service.getCustomers(res);
        res.write('OK');
        //res.send(200); this will end the response before query ends
    } catch (err) {
        res.end(err);
    }

服务:

const getCustomers = async (res) => {
    customers = await mysqlPool.query('select * from cusomerTable');
    res.send(customers);
}

错误:将标头发送到客户端后,无法设置标头。

如何解决此问题?

回答如下:

您可以使用服务器发送的事件。您可以在收到请求后立即发送事件。结果准备好后,您可以发送另一个事件。请找到我的GitHub repo对SSE样本有用。

您可以只使用res.write()来流式传输响应。发现此StackOverflow answer有用。

如何在node.js中为单个请求返回2个响应

我的节点应用程序很简单,对于查询mysql数据库中总客户的请求,我使用await进行了块调用,以等待查询完成。问题是它每秒只能处理约75个请求,太低了。

因此,每当我收到请求时,我都尝试返回200,告诉呼叫者我收到请求。准备好后返回查询结果,mysql查询可能需要一段时间。

但尚未为我工作,这是代码:

路由器:

router.get('', controller.getCustomers);

控制器:

const getCusomers = (req, res) => {
    try {
        service.getCustomers(res);
        res.write('OK');
        //res.send(200); this will end the response before query ends
    } catch (err) {
        res.end(err);
    }

服务:

const getCustomers = async (res) => {
    customers = await mysqlPool.query('select * from cusomerTable');
    res.send(customers);
}

错误:将标头发送到客户端后,无法设置标头。

如何解决此问题?

回答如下:

您可以使用服务器发送的事件。您可以在收到请求后立即发送事件。结果准备好后,您可以发送另一个事件。请找到我的GitHub repo对SSE样本有用。

您可以只使用res.write()来流式传输响应。发现此StackOverflow answer有用。

发布评论

评论列表 (0)

  1. 暂无评论