使用 app router 在 VS Code 中创建了一个 MTAR 应用程序。将 approuter 的启动文件更改为不同的文件,让我们说 custominfo.js 如下
下面是 custominfo.js 中的代码
const approuter = require("@sap/approuter");
const jwtDecode = require("jwt-decode");
const rp = require("request-promise");
const xsenv = require("@sap/xsenv");
xsenv.loadEnv();
const dest_service = xsenv.getServices({ dest: { tag: "destination" } }).dest;
const uaa_service = xsenv.getServices({ uaa: { tag: "xsuaa" } }).uaa;
const sUaaCredentials = dest_service.clientid + ":" + dest_service.clientsecret;
const sDestinationName = "devapi";
let ar = approuter();
ar.beforeRequestHandler.use("/data", (req, res) => {
let email = jwtDecode(req.user.token.accessToken).email;
return rp({
uri: uaa_service.url + "/oauth/token",
method: "POST",
headers: {
"Authorization": "Basic " + Buffer.from(sUaaCredentials).toString("base64"),
"Content-type": "application/x-www-form-urlencoded"
},
form: {
"client_id": dest_service.clientid,
"grant_type": "client_credentials"
}
}).then((data) => {
const token = JSON.parse(data).access_token;
return rp({
uri: dest_service.uri + "/destination-configuration/v1/destinations/" + sDestinationName,
headers: {
"Authorization": "Bearer " + token
}
});
}).then((data) => {
const oDestination = JSON.parse(data);
const url = oDestination.destinationConfiguration.URL;
// need to send email address and app router url to fetch some json data in the API c
configured in destination
}).then((result) => {
}).catch((error) => {
});
});
ar.start();
在上面的节点 js 脚本中,我需要将电子邮件地址和应用路由器 URL 发送到其他 REST api 以获取一些数据。
所以问题是
我如何在第一个 Request Promise(rp) 中从 JWT Token 获取电子邮件地址,在第二个 Request Promise(rp) 中从目标服务获取目标 URL,并将这些东西传递给第三个 Request Promise (rp) 。
第三个请求承诺应该触发一个 REST API(Url 是从第二个 RP 中的目标服务中提取的),并且应该将标题部分中的电子邮件地址和应用程序路由器 url 发送到该 REST API 返回自定义 JSON 。
我能够在单独的请求承诺中获取 url 和电子邮件,但无法获取应用程序路由器 URL。
问候
普拉萨德