Как вернуть значение функции Unirest и отправить ее с помощью Express? - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над приложением Language Translation для моего кодирования bootcamp.Я использую Microsoft Text Translations API на серверной стороне для перевода пользовательского ввода для получения желаемого результата для каждого запроса.

Я столкнулся с проблемой, что эта функция, которую я написали не возвращает данные обратно на переднюю сторону (снимок экрана инспектора) , даже если функция работает на задней стороне (снимок экрана терминала) .

Вот код конверсии:

function langTranslateJSON(startLang, endLang, textString) {
  let queryURL = `https://microsoft-azure-translation-v1.p.rapidapi.com/translate?from=${startLang}&to=${endLang}&text=${textString}`;
  unirest
    .get(queryURL)
    .header(
      "X-RapidAPI-Key",
      API_KEY
    )
    .end(result => {
    //data comes back as an XML string ?//
      let xmlString = result.body 
      
      parseString(xmlString, function (err, data) {
        console.log(data)
        return data
      })
    })
}

А вот POST-маршрут к пользователю

 //Using Express//
 
 app.post("/api/Translate", function (req, res) {
    res.send(langTranslate.langTranslateJSON(
      req.body.translateFromLanguage,
      req.body.translateToLanguage,
      req.body.translateFrom));
  });

1 Ответ

0 голосов
/ 25 февраля 2019
// notice 4th callback argument after textString argument
function langTranslateJSON(startLang, endLang, textString, callback) {
  let queryURL = `https://microsoft-azure-translation-v1.p.rapidapi.com/translate?from=${startLang}&to=${endLang}&text=${textString}`;
  unirest
    .get(queryURL)
    .header(
      "X-RapidAPI-Key",
      API_KEY
    )
    .end(result => {
    //data comes back as an XML string ?//
      let xmlString = result.body 

      parseString(xmlString, function (err, data) {
        console.log(data)
        // Fire the callback here and pass in the data result
        callback(data);
      })
    })
}

Теперь внутри вашего экспресс-POST-маршрута вам нужно передать функцию обратного вызова

 app.post("/api/Translate", function (req, res) {
  // first you call your langTraslateJSON method
  // notice the 4th argument is now passing in the callback function
  // when your method is run it will invoke the callback you are passing here
  // and pass the data to the callback. 
  // It will then invoke the Express res.send method with this data  
  langTranslate.langTranslateJSON(
      req.body.translateFromLanguage,
      req.body.translateToLanguage,
      req.body.translateFrom, function(myDataResponse){
         res.send(myDataResponse)
      })
  });
...