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

Posted vieber

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are s相关的知识,希望对你有一定的参考价值。

问题背景

在用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之后就行了。

以上是关于UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are s的主要内容,如果未能解决你的问题,请参考以下文章