2015-05-28 5 views
0

Я использую следующий код, чтобы принять пользовательский sms из моего приложения android и отправить результат пользователю после того, как указанный запрос получить на какой-то сайт. Ожидаемый результат, который должен получить пользователь «спасибо за ваше сообщение» + [ответ на запрос получения] .. что я получаю: «Спасибо за ваше сообщение неопределенным», похоже, что моя переменная «тело» не инициализируется с помощью ответа GET. helpGet Response Не инициализирует локальную переменную

var express = require('express'); 
    var app = express(); 
    app.set('port', (process.env.PORT || 5000)); 
    app.use(express.static(__dirname + '/public')); 

    app.get('/', function(request, response) { 
    response.send('Hello Cruel World!'); 
}); 

var bodyParser = require('body-parser'); 

var WEBHOOK_SECRET = "62DZWMCCFFHTTQ44CG3WUQ94CTT7GAAN"; 

app.post('/telerivet/webhook', 
bodyParser.urlencoded({ extended: true }), 
function(req, res) { 
    var secret = req.body.secret; 
    if (secret !== WEBHOOK_SECRET) { 
     res.status(403).end(); 
     return; 
    } 

    if (req.body.event == 'incoming_message') { 

    var content = req.body.content; 
    var from_number = req.body.from_number; 
    var phone_id = req.body.phone_id; 
    var request = require("request"); 
    var body; 
    request("http://www.google.com", function(error, response, data) { 
    body = data; 
    }); 
    // do something with the message, e.g. send an autoreply 
    res.json({ 
     messages: [ 
     { content: "Thanks for your message! " + body} 
     ] 
    }); 

    } 

    res.status(200).end(); 
} 
    ); 

app.listen(app.get('port'), function() { 
console.log('Node app is running on port', app.get('port')); 
}); 

, пожалуйста, помогите мне решить проблему. Ответ отправлен здесь, кажется, не работает http://goo.gl/GYgd6Z,help, взяв мой код, указанный здесь в качестве примера ... пожалуйста

ответ

0

res.json линия будет выполняться до обратного вызова от request, поэтому тело не будет заполняться - изменение как это:

request("http://www.google.com", function(error, response, data) { 
    // do something with the message, e.g. send an autoreply 
    res.json({ 
     messages: [ 
      { content: "Thanks for your message! " + data} 
     ] 
    }); 
    res.status(200).end(); 
}); 

Это гарантирует, что res.json выполняется после получения ответа от request().

+0

спасибо, что именно мне нужна ...! Эта асинхронность создает проблему для таких любителей, как я! Ha – SheikhZayed

+0

@SheikhZayed welcome! Для node.js важно обходить асинхронный способ работы, потому что почти все асинхронно! –

+0

Уверенный брат, напишите мне хорошую книгу, которая сделает меня экспертным пилотом для узла js – SheikhZayed

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