【问题标题】:How to retrieve a variable from a script to put in another script nodejs如何从脚本中检索变量以放入另一个脚本 nodejs
【发布时间】:2020-12-09 22:35:51
【问题描述】:

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

这是车把:

enter image description here

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

enter image description here

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

enter image description here

我想代替 getSharedCalend 中的 giveUser() 函数将已检查人员的电子邮件地址放入 .hbs 提前感谢您的帮助。

【问题讨论】:

  • 如果您将代码粘贴为代码而不是图像会更容易。我不明白你想达到什么目的。
  • 什么是 giveUser 功能?您没有为此提供代码。
  • 我只想将要从 html(客户端)检索的电子邮件地址作为参数传递,此处更准确地说是 graph.js 文件中的 getSharedCalend 函数:example .api ('/users/AdeleV @M365x049216.OnMicrosoft.com/calendar/events'

标签: javascript node.js microsoft-graph-api


【解决方案1】:

我的文件路由器 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;

【讨论】:

    【解决方案2】:
    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;
    }`
    

    【讨论】:

      【解决方案3】:

      日历.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>`
      

      【讨论】:

        【解决方案4】:

        好的,我花了几分钟反复阅读这篇文章,我可能明白了。 你有两个脚本。 script.js客户端 脚本和 graph.js服务器端 脚本。

        那些脚本不能直接通信。 script.js 在用户浏览器中运行,而 graph.js 在您的服务器上运行。您可以做的是发出 HTTP 请求。通过创建 html &lt;form&gt; 或通过 JavaScript 使用 fetch。然后您可以将用户重定向到日历。

        【讨论】:

        • 感谢您的回答:
        猜你喜欢
        • 2020-02-16
        • 1970-01-01
        • 2015-07-01
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        相关资源
        最近更新 更多