的console.log(err.message); &安培;的console.log(ERR [0] .message);

时间:2018-04-29 00:59:23

标签: javascript node.js twitter error-handling console.log

使用Twitter API时,如果一切正常,那么使用err[0].message将返回You have already ___ed this tweet.,但是如果HTTP状态代码通过,比如由于速率限制,则输出将变为{{1这可能导致脚本在失败时停止。

这可以通过将TypeError: Cannot read property 'message' of undefined更改为err[0].message来解决,但是,如果一切正常,则会返回err.message而不是undefined

使用You have already ____ed this tweet.时的小部件:

err.message

速率限制时的输出:

T.post('statuses/retweet', id, function(err, response){
    // log failures
    if(err){
      console.log(err.message);

不限速时的输出:

HTTP Error: 429 Too Many Requests

使用undefined 时的小部件:

err[0].message

速率限制时的输出:

T.post('statuses/retweet', id, function(err, response){
    // log failures
    if(err){
      console.log(err.message);

不限速时的输出:

TypeError: Cannot read property 'message' of undefined

那么处理这个问题的最佳方法是什么才能确保两者都能正确记录而不会导致错误或输出不清楚?

1 个答案:

答案 0 :(得分:1)

如果没有错误,err将为undefined

如果发生速率限制,err将为HTTP Error: 429 Too Many Requests

如果发生其他错误,err将是一个数组。

您可以检查err类型以处理所有方案。

'use strict';

let _ = require('lodash');

T.post('statuses/retweet', id, function (err, response) {

  if (err) {
    if (_.isArray(err)) {
      // handles You have already ___ed this tweet.
      console.log(err[0].message);
    } else {
      // this takes care of HTTP Error: 429 Too Many Requests
      console.log(err.message);
    }
  }

});