【问题标题】:Cannot set headers after they are sent to the client while parsing data in node js在节点js中解析数据时,无法在将标头发送到客户端后设置标头
【发布时间】:2022-01-06 09:14:22
【问题描述】:

我正在使用 csv 解析器读取 csv 文件并将接收到的 csv 文件数据传递给 ejs 模板文件进行打印,因此数据为对象格式,所以我使用了 stringyfy 但因此出错。

错误:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client:

节点js代码

app.get('/', function (req, res, next) {
    fs.createReadStream('./Employee.csv')
        .pipe(csv())
        .on('data', function (rows) {
            try {
            var ParsedData=  data:JSON.stringify(rows);
                 res.render('Emp_details',{data:ParsedData});
            }
            catch (err) {
                //error handler
            }
        })
        .on('end', function () {
            //some final operation
        });


});

在 ejs 模板文件中打印数据的代码:

<% for(var i = 1; i<= data1.length; i++) { %>
         <%=i %>
       <% } %>
    

【问题讨论】:

  • @jps 我没听明白。
  • 我的意思是,您是否在 SO 上搜索以找到解决方案?在询问相同错误的 100 多个其他问答(链接在我的评论中)中,您没有发现任何有用的信息吗?
  • @jps 我尝试了 stackoverflow 上提供的其他解决方案,但没有帮助我

标签: javascript node.js express node-csv-parse


【解决方案1】:

您收到错误是因为res.render 只能被调用一次,但您每次都会调用它data 事件触发。

你需要在收集完所有数据后在你放评论//some final operation的地方调用它。

【讨论】:

  • 我发现您的评论很有用,请您详细解释一下。我不知道这个概念。
  • 你能解释一下我在最后阶段保持渲染的建议吗?但是渲染在这里不起作用
  • 您是否收集了data 事件中的所有数据,以便渲染函数使用?
  • 我只是使用流函数来获取所有值并传递给ejs页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多