Я использую xml2js с node.js для извлечения данных из API, но мне бы хотелось, чтобы код запускался только при активированном маршруте "/ testpage", который затем назначал бы ответ api переменной и передавал это вместе со скриптом на testpage.ejs, конечной целью которого является вывод содержимого объекта / переменной на консоль.
Проблема, с которой я сталкиваюсь, заключается в том, что я получаю "неопределенный" ответ консоли браузера с приведенным выше кодом.
Если я размещу код вне маршрута, получу ответ, присвоенный переменной, а затем передам эту переменную в сценарий тестовой страницы, тогда он будет работать нормально.
На данный момент я предполагаю, что это может быть асинхронная проблема, но я не уверен, или даже как решить эту проблему, если так.
// Node.js
const requestPromise = require('request-promise'),
xml2js = require('xml2js').parseString,
express = require("express"),
app = express();
const port = 3200,
apiURL = 'https://api.exampleapi.com';
app.set("view engine", "ejs");
app.use('/public', express.static(__dirname + "/public"));
app.get("/testpage", function(req, res){
var myApiObject; // To store api response
requestPromise.post(apiURL, (error, response, body) => {
if(error){
console.log(error);
return error;
}
}).then( (body) => {
xml2js(body, (err, result) => {
if(err){
console.log(err);
} else {
myApiObject = result;
return result;
}
});
});
res.render("testpage", {myApiObject: myApiObject});
});
app.listen(process.env.PORT || port, function(){
console.log("Server is running...");
});
<!--testpage.ejs-->
<html>
<head>
<title>
</title>
</head>
<body>
<p>This is the testpage</p>
<script>
var myObj =<%-JSON.stringify(myApiObject)%>
console.log(myObj);
</script>
</body>
Есть идеи, что я делаю не так?