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

文章讲述了在开发Node.js接口时遇到的ERR_HTTP_HEADERS_SENT错误,该错误由于尝试在已经发送响应后再次设置HTTP头部导致。作者提到问题出现在对同一个路由发送了两次res.json(),分别在插入图片数据和文章数据的数据库操作后。解决方案是避免在不同数据库调用中发送多次响应。
摘要由CSDN通过智能技术生成

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

错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后不能设置报头

不能再一个路由中发送两次响应(res.send,res.Json)

因为将数据分开存放所以调用两次封装号好的mysql,调用两次都发送了res.json导致报错

// 发布文章
router.post('/', function (req, res, next) {
  // console.log(req.body);
  // 随机数作为id
  function algorithm () {
    let abc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
    let [max, min] = [Math.floor(Math.random() * (10 - 7 + 1) + 1), Math.floor(Math.random() * (17 - 10 + 1) + 17)];
    abc = abc.sort(() => 0.4 - Math.random()).slice(max, min).slice(0, 8).join("");
    var a = new Date().getTime() + abc;
    return a
  }
  let id = algorithm()
  // 图片数据解析
  let cover = {
    id,
    type: req.body.cover.type,
    images: req.body.cover.images == "" ? null : req.body.cover.images
  }
  db("insert into db_image set ?", cover, (err, result) => {
//将这部分注释就好了
    // if (err) {
    //   console.log(err);
    //   res.json({
    //     msg: "新增图片失败",
    //     code: 0
    //   })
    // } else {
    //   res.json({
    //     code: 1,
    //     msg: "新增图片成功",
    //   })
    // }
  })
  let values = {
    id,
    title: req.body.title,
    content: req.body.content,
    channel_id: req.body.channel_id,
    comment_count: 0,
    like_count: 0,
    read_count: 0,
    status: 2,
    pubdate: dayjs().$d
  }
  db("insert into pc_articles set ?", values, (err, result) => {
    if (err) {
      console.log(err);
      res.json({
        msg: "新增文章失败",
        code: 0
      })
    } else {
      res.json({
        code: 1,
        msg: "新增文章信息成功",

      })
    }
  })
})

ps:第一次拿node写接口很多地方代码还是很冗余且不规范

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值