2017-02-05 4 views
1

Я новичок в узел и асинхронный ...Асинхронных - Невозможно установить заголовки после отправки

Я получаю сообщение об ошибке сказав я не могу установить заголовки после того, как они послали, когда я направляю ответ назад на api-ai

Любая идея, почему?

Ниже приведен код функции - getUserFirstName (идентификатор пользователя, имя, обратный вызов):

var name = ""; 
function getUserFirstName(userId, name, callback) { 
    console.log('withParams function called'); 

    request({ 
     method: 'GET', 
     uri: "https://graph.facebook.com/v2.6/" + userId + "?fields=first_name,last_name,profile_pic,locale,timezone,gender&access_token=" + FB_PAGE_ACCESS_TOKEN 
    }, 
    function (error, response) { 
    if (error) { 
     console.error('Error while userInfoRequest: ', error); 
    } else { 
     if(!typeof response.body != 'object'){ 
      var body = JSON.parse(response.body); 
      name = body.first_name; 
      callback(null,name); 
     }else{ 
      name = response.body.first_name; 
      callback(null,name); 
     } 
    } 
    }); 
} 

Вот код выполняется:

app.post('/webhook/', (req, res) => { 
     var data = JSONbig.parse(req.body);   
     var action = data.result.action; 
     var facebook_message = []; 

     if(action == "input.welcome"){ 
     var userId = data.originalRequest.data.sender.id; 

     async.series([ 
      function(callback) { 
      getUserFirstName(userId, name, callback); 
      } 
     ], function(err,results) { 

      if (results != undefined){ // results = "John" 

      facebook_message = [{ 
       "text":"Heyyyoo. Welcome!" 
      }] 
      }else{ 
      facebook_message = [{ 
       "text":"Hey " + results +"! Welcome!" // Hey John! Welcome! 
      }] 
      } 

      res.json({ // line 308 - error here! 
      speech: "Greetings", 
      displayText: "Greetings", 
      "data": { 
       "facebook": facebook_message 
      }, 
      source: "webhook" 
      }); 
     }); 

     } 

     // BUNCH OF LONG AND MESSY CODES OVER HERE... 

     return res.status(200).json({ 
     status: "ok" 
     }); 

Ошибка

Error: Cant set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) 
    at ServerResponse.header (/app/node_modules/express/lib/response.js:719:10) 
    at ServerResponse.send (/app/mode_modules/express/lib/response.js:164:12) 
    at ServerRespose.json (/app/mode_modules/express/lib/response.js:250:15) 
    at /app/src/app.js: 308:15 
    at /app/node_modules/async/dist/async.js:3694:9 
    at /app/node_modules/async/dist/async.js:356:16 
    at replenish (/app/node_modules/async/dist/async.js:877.25) 
    at iterateeCallback (/app/node_modules/async/dist/async.js:867:17) 
    at /app/node_modules/async/dist/async.js:840:16 
+0

Зачем использовать 'async.series()' для одной операции async. Это бессмысленно. – jfriend00

+0

Где именно происходит эта ошибка? Я не вижу очевидной причины этой ошибки в коде, который вы показываете. – jfriend00

+0

Я думаю, вы должны воспроизвести свое сообщение об ошибке, как есть, здесь. –

ответ

Смежные вопросы