微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

管理 Gcal Response + express 和 header 问题

如何解决管理 Gcal Response + express 和 header 问题

我是 node 的新手,在一个简单的 node+express+googlecal+pug 问题上我的头撞在墙上

  • node/express 路由接受请求并调用控制器
  • 控制器确保验证身份验证,然后...
  • 执行成功的 gcal 函数...console.log 有我需要的数据
  • 尝试直接(在控制器函数中)返回“在将标头发送到客户端后无法设置标头”....为什么对 Gcal API 的调用会强制将响应返回给客户端?
  • 尝试通过对每个函数的单独调用来使其更微观,结果相同

在这里遗漏了什么?

  getcalendars: async function(oauth2client,res)   {
const calendar = google.calendar({ version: "v3",auth: oauth2client });

cal = await calendar.calendarList.list(
  {},(err,result) => {
    //console.log("HEADERS SENT1?: "+res.headeRSSent);
    if (err) {
    console.log('The API returned an error: ' + err);
    return;
    }

    console.log(JSON.stringify(result));
    message2 = JSON.stringify(result)


  res.render('schedules',{message2: message2})
  return
});

},

编辑:调用函数

router.route('/dashboard/schedules')
.get(async function(req,res) {

  if (req.session.loggedin) {

          
//x =  gcalController.getcalendars(req,res);  
            token = await gcalController.gettoken(req,res);
            isAuth = await gcalController.calauth(token);
            listcalendars = await gcalController.getcalendars(isAuth,res);
      } else {
          res.redirect("/?error=FailedAuthentication")
          //res.send('Please login to view this page!');
      }
      
});
    

解决方法

Can't set headers already sent 在您多次发送响应时发生。通常,您可以通过返回 res.send() 调用来终止该函数。

看起来创建 res 对象的快速中间件在您的 res.render() 被拉出微任务队列时正在发送响应。

你能展示完整的代码吗?似乎这可能源于调用 getcalendars 的范围。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。