Node对接Twitter API报错ERR_HTTP_HEADERS_SENT且服务崩溃如何排查
错误原因
这个ERR_HTTP_HEADERS_SENT报错和Twitter API凭证校验没有关联,是代码逻辑错误导致的:
你在/tweets/:search路由处理逻辑中,对同一个请求连续两次触发了响应返回操作:
- 第一次执行
res.json({'status':'Success'})时,Express已经将完整的响应头、响应体返回给客户端,当前HTTP请求的处理流程已经结束 - 第二次在Twit调用Twitter API的回调函数中,再次执行
res.json(data),此时Express尝试重复设置响应头,就会抛出该错误,直接终止服务运行
修复方案
删除无意义的第一次res.json调用即可,同时可以在回调中补充错误处理逻辑,用来校验API凭证是否有效,修改后的路由代码如下:
app.get('/tweets/:search', function(req,res) { console.log(req.params.search); T.get('search/tweets', { q: req.params.search, count: 7 }, function(err, data, response) { // 处理接口调用错误,包含凭证校验失败的场景 if (err) { return res.status(400).json({ status: 'error', msg: '接口调用失败', errInfo: err }) } res.json(data) }) })
API凭证有效性排查方法
如果需要确认凭证是否正常,你可以在上述代码的错误处理逻辑中打印err参数:
- 若凭证无效,
err中会返回401未授权的错误提示,不会触发本次的ERR_HTTP_HEADERS_SENT报错 - 也可以直接在Twit初始化后,先调用一次简单的公开接口,查看返回结果是否正常
内容的提问来源于stack exchange,提问作者Stackchampu
相关产品推荐
相关产品推荐

