如何将 xml2js 响应传递给 node.js 路由中的变量?
How to pass xml2js response to variable within node.js route?
我正在使用带有 node.js 的 xml2js 从 API 检索数据,但我只希望在激活“/testpage”路由时将代码设为 运行,然后将 api 响应分配给变量并将其传递给 testpage.ejs 上的脚本,最终目标是将 object/variable 内容打印到控制台。
我面临的问题是我正在使用上述代码获得 "undefined" 浏览器控制台响应。
如果我将代码放在路由之外,将响应分配给一个变量,然后将该变量传递给测试页面脚本,那么它就可以正常工作。
在这一点上,我假设这可能是一个异步问题,但我不确定,如果是的话,我什至不确定如何解决它。
// 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>
对我做错了什么有什么想法吗?
您需要在收到来自 API 调用的响应后呈现您的页面。像这样更改您的代码:
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 {
res.render("testpage", {myApiObject: result});
return result;
}
});
});
我正在使用带有 node.js 的 xml2js 从 API 检索数据,但我只希望在激活“/testpage”路由时将代码设为 运行,然后将 api 响应分配给变量并将其传递给 testpage.ejs 上的脚本,最终目标是将 object/variable 内容打印到控制台。
我面临的问题是我正在使用上述代码获得 "undefined" 浏览器控制台响应。
如果我将代码放在路由之外,将响应分配给一个变量,然后将该变量传递给测试页面脚本,那么它就可以正常工作。
在这一点上,我假设这可能是一个异步问题,但我不确定,如果是的话,我什至不确定如何解决它。
// 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>
对我做错了什么有什么想法吗?
您需要在收到来自 API 调用的响应后呈现您的页面。像这样更改您的代码:
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 {
res.render("testpage", {myApiObject: result});
return result;
}
});
});