如何从脚本中检索变量以放入另一个脚本nodejs中



您好,我的项目使用Microsoft Graph API时遇到了一个小问题。我需要实现一个从Azure AD检索用户共享日历的REST API。为此,我使用NodeJS和express。

这是车把:

在此处输入图像描述

我实现了一个脚本(script.js(,它检索用户的用户名(用户名对应于他们的电子邮件地址(:

在此处输入图像描述

既然我得到了我想查阅他的日历的人的电子邮件地址,我就必须在另一个脚本(graphic.js(的函数中传递这个变量:

在此处输入图像描述

我想把被签入.hbs的人的电子邮件地址放在.hbs中,而不是getSharedCalend中的giveUser((函数提前感谢您的帮助。

好吧,我花了几分钟反复阅读,我可能明白了。您有两个脚本script.js客户端脚本,而graph.js服务器端剧本。

这些脚本无法直接通信script.js正在用户浏览器中运行,graphic.js正在服务器上运行。您可以做的是发出HTTP请求。通过创建html<form>或通过使用fetch的JavaScript。然后您可以将用户重定向到日历。

calendar.hbs:

<table class="table">
<thead>
<tr>
<th scope="col">Organizer</th>
<th scope="col">Subject</th>
<th scope="col">Start</th>
<th scope="col">End</th>
</tr>
</thead>
<tbody>
{{#each shrdcalend}}
<tr>
<td>{{this.organizer.emailAddress.name}}</td>
<td>{{this.subject}}</td>
<td>{{eventDateTime this.start.dateTime}}</td>
<td>{{eventDateTime this.end.dateTime}}</td>
</tr>
{{/each}}
</tbody>
</table>
<h1>Choice Shared Calendar</h1>
<table class="table">
<thead>
<tr>
<th scope="col">nom</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<form id="inscription">
{{#each usersprop}}
{{this.userPrincipalName}} : <input type="radio" name="username" id="username" value={{this.userPrincipalName}}><br>
{{/each}}
<td> <button type ="submit" value="inscription" >Voir Calendrier</button> </td>
</form>
<p style ="color: red;"id="erreur"></p>
</td>
</tr>
</tbody>
</table>`
//script on calendar.hbs
`<script>
document.getElementById("inscription").addEventListener("submit",function(e){
var erreur;
var entrer = document.getElementById("inscription").getElementsByTagName("input");
console.log(entrer);
for (var i=0 ; i<entrer.length; i++ ){
var chek = entrer[i].checked;
var username = entrer[i].value;
if(chek == true){
console.log(chek);
console.log(e);
console.log(username);
alert(username);
alert('formulaire envoyé !');
return username;
}else{
erreur = "0 case selec";
}
}
if(erreur){
e.preventDefault();
document.getElementById("erreur").innerHTML = erreur;
return false;
}
}
);
</script>`
graph.js:var graph = require('@microsoft/microsoft-graph-client');
require('isomorphic-fetch');
module.exports = {
getUserDetails: async function(accessToken) {
const client = getAuthenticatedClient(accessToken);
const user = await client.api('/me').get();
return user;
},
getEvents: async function(accessToken) {
const client = getAuthenticatedClient(accessToken);
const events = await client
.api('/me/calendar/events')
.select('subject,organizer,start,end')
.orderby('createdDateTime DESC')
.get();
return events;
},
getUserS: async function(accessToken) {
const client = getAuthenticatedClient(accessToken);
const usersprop = await client.api('/users').select('userPrincipalName').get();
return usersprop;
},
getSharedCalend: async function(accessToken) {
const client = getAuthenticatedClient(accessToken);
console.log(getusershrd());
const shrdcalend = await client
.api('/users/'+***???***+'/calendar/events')
.get();
return shrdcalend;
}
};
function getAuthenticatedClient(accessToken) {
// Initialize Graph client
const client = graph.Client.init({
// Use the provided access token to authenticate
// requests
authProvider: (done) => {
done(null, accessToken);
}
});
return client;
}`

我的文件路由器calendar.js:

var express = require('express');
var router = express.Router();
var tokens = require('../tokens.js');
var graph = require('../graph.js');

/* GET /calendar */
// <GetRouteSnippet>
router.get('/',
async function(req, res) {
if (!req.isAuthenticated()) {
// Redirect unauthenticated requests to home page
res.redirect('/')
} else {
let params = {
active: { calendar: true }
};
// Get the access token
var accessToken;
try {
accessToken = await tokens.getAccessToken(req);
} catch (err) {
req.flash('error_msg', {
message: 'Could not get access token. Try signing out and signing in again.',
debug: JSON.stringify(err)
});
}
if (accessToken && accessToken.length > 0) {
try {
// Get the events
var events = await graph.getEvents(accessToken);
params.events = events.value;
} catch (err) {
req.flash('error_msg', {
message: 'Could not fetch events',
debug: JSON.stringify(err)
});
}
try {
// Get the calendars users
var shrdcalend = await graph.getSharedCalend(accessToken);
params.shrdcalend = shrdcalend.value;
} catch (err) {
req.flash('error_msg', {
message: 'Could not fetch shared calend',
debug: JSON.stringify(err)
});
}
try {
// Get the events
var usersprop = await graph.getUserS(accessToken);
params.usersprop = usersprop.value;
} catch (err) {
req.flash('error_msg', {
message: 'Could not fetch shared calend',
debug: JSON.stringify(err)
});
}
} else {
req.flash('error_msg', 'Could not get an access token');
}
res.render('calendar', params);
}
}
);
module.exports = router;

最新更新