UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are s

在构建Node.js服务器端渲染(SSR)服务时遇到启动错误,问题源于尝试在渲染错误发生前发送响应。解决方案是将`res.write`调用移至`renderToString`之后,确保在渲染失败时能正确返回JSON错误信息。这样做可以避免部分响应发送并防止服务器状态异常。
摘要由CSDN通过智能技术生成

问题背景

在用nodejs写ssr服务的时候,我们服务启动的时候报了这个错误。
经过调查,原来是我们程序有报错了。
但是因为我们在报错之前发送了write请求,导致发送了一半失败了,出发reject,但是reject是发送一个json就会报这个错误了。

try {
     res.write(`<!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width,
             initial-scale=1.0, maximum-scale=1.0, user-scalable=no,
             viewport-fit=cover">
         <meta http-equiv="X-UA-Compatible" content="ie=edge">
         <title>title</title>
         <style></style>`);

    let html = await renderToString(req);

    res.end(html);
} catch (err) {
    res.json({
        status: -1,
        msg: '渲染失败'
    });
}

解决办法

把这个res.write放在renderToString之后就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值