【问题标题】:Why am I getting Node Error Cannot set headers after they are sent to the client?为什么在将标头发送到客户端后出现节点错误无法设置标头?
【发布时间】:2021-05-11 12:12:48
【问题描述】:

我有这个简单的服务器来玩 express 和 node。当我在 app.get() 方法中调用函数时出现此错误。我在互联网上搜索过,但仍然无法弄清楚这里发生了什么。

错误

 http_outgoing.js:518
        throw new ERR_HTTP_HEADERS_SENT('set');
        ^
    
    Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after 
    they are sent to the client
        at ServerResponse.setHeader (_http_outgoing.js:518:11)
        at Array.write (G:\Project\Node Projects\Automater\node_modules\finalhandler\index.js:285:9)
        at listener (G:\Project\Node Projects\Automater\node_modules\on-finished\index.js:169:15)
        at onFinish (G:\Project\Node Projects\Automater\node_modules\on-finished\index.js:100:5)
        at callback (G:\Project\Node Projects\Automater\node_modules\ee-first\index.js:55:10)
        at IncomingMessage.onevent (G:\Project\Node Projects\Automater\node_modules\ee-first\index.js:93:5)
        at IncomingMessage.emit (events.js:327:22)
        at endReadableNT (_stream_readable.js:1221:12)      
        at processTicksAndRejections (internal/process/task_queues.js:84:21) {
      code: 'ERR_HTTP_HEADERS_SENT'
    }

这是我的代码

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/user',(req,res,next) =>{
    log(req,res,next);
    res.send('user');
    
})

app.get('/',(req,res,next) => {
    res.send('Success');
});

function log(req,res,next){
    console.log('Logger !!!');
    next();
}
app.listen(port, () => console.log(`listening on port ${port}!`));

【问题讨论】:

  • 这里我想做的是在app.get() 中调用一个函数。当我像app.get('/user',log,(req,res,next) =>{ res.send('user'); }) 一样通过它时,它工作正常。但是当我在res.send() 上方的函数中调用log() 函数时,它会给出这个错误

标签: node.js express error-handling


【解决方案1】:

您应该删除res.end(),因为res.send(...) 会为您调用res.writeres.setHeadersres.end。当您致电res.send(...) 时,您已经向客户端发送了响应。

【讨论】:

  • 不,即使我删除了res.end(),它也给了我同样的错误
  • 已经提到过,但是,是的,您还应该在 log 函数中删除 next()
【解决方案2】:

表示响应已经发送到客户端。

你正在做两件事: res.send('user'); res.end();

去掉 res.end() 应该就好了。

【讨论】:

  • 不,即使我删除了res.end(),它也给了我同样的错误
  • 我认为 log() 函数只是用来记录的,这种情况下你可以这样修改:function log(){ console.log('Logger !!!'); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多