Используя POST-запрос, я отправляю предоставленную пользователем информацию в API, который предоставит специфичную для пользователя информацию.
Теперь я хочу сохранить информацию, регургитированную POST-запросом, как переменную, которую я могу использовать вдругие функции / диалоги.
Я пробовал следующее:
- Сохранить тело запроса POST в переменной session.userData.xxx
- Объявлена глобальная переменнаяи использовал его для хранения тела.
- Объявил переменную в запросе post, в которой я сохранил тело
Версия кода, которую я сделал, выглядит следующим образом:
var body2;
bot.dialog('FunctionA', [
function (session) {
session.sendTyping();
builder.Prompts.text(session, "Please key-in your App ID:");
},
function (session, results) {
session.userData.AppID= results.response;
var options = {
url: 'APIXYZ.COM',
headers: {
'Content-Type' : 'application/json'
},
body: JSON.stringify({"appID": session.userData.AppID})
};
request.post(options, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body); //logs okay
session.userData.infoA = body;
console.log(session.userData.infoA) //logs okay
body2 = body;
console.log (body2) // logs ok
var bodyvar = body;
console.log (bodyvar) //logs ok
} else {
console.log("Error: " + error);
console.log("Status Code: " + response.statusCode);
}
});
var msg = new builder.Message(session)
.text("The body is:" + session.userData.infoA) //outputs "The body is undefined", if body2,bodyvar -> empty
.suggestedActions(
builder.SuggestedActions.create(
session, [
builder.CardAction.imBack(session, "Ok", "Ok")
builder.CardAction.imBack(session, "No", "No")
]
));
session.send(msg).endDialog();
}]).triggerAction({ matches: /^ABC/i });
Похоже, что он работает только внутри блока запроса, и я не могу использовать его вне этого.Он регистрируется как неопределенный при использовании вне его.Я хотел бы иметь возможность сохранять тело запроса POST как переменную, чтобы я мог использовать их вне этого диалога, а также сохранить его в базе данных.
Спасибо!
Редактировать:
Я объявил body2 как переменную вне диалогового окна и блока запроса, и использовал переменную в том же диалоговом окне сразу после request.post
var msg = new builder.Message(session)
.text("The body contains: " + body2 + " .")
.suggestedActions(
builder.SuggestedActions.create(
session, [
builder.CardAction.imBack(session, "Ok", "Ok")
builder.CardAction.imBack(session, "No", "No")
]
));
Это выводит The body contains: undefined .
Я также пытался использовать его в другом диалоговом окне:
bot.dialog('Validation', function (session) {
console.log(body2);
session.send("The content is : " + body2 +" xx");
if (body2== "ABC")
{
session.sendTyping();
var msg = new builder.Message(session);
[.......]
В результате появляется приглашение "Oops. Something went wrong and we need to start over"