RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 939229
Accepted
Alisa Bondarchuk
Alisa Bondarchuk
Asked:2020-02-01 02:39:10 +0000 UTC2020-02-01 02:39:10 +0000 UTC 2020-02-01 02:39:10 +0000 UTC

如何将承诺值从一个文件传递到另一个文件?

  • 772

我的情况很糟糕。我使用 express 和 axios,我想传递 promise 的值,但他们就是不能。有一个服务器文件、身份验证和购物篮。我在服务器文件中获取访问令牌变量,并且必须将其传递给购物车函数。当所有东西都写在一个文件中时,没有问题,当我用单独的身份验证文件编写时,也没有问题,但是当我写另一个单独的篮子文件时,就什么也没有了。

正文文件服务器

const path = require('path');
const express = require('express');           // For web server
const Axios = require('axios');               // A Promised base http client
const bodyParser = require('body-parser');    // Receive JSON format
const querystring = require('querystring');

let app = express();
app.use(bodyParser.json())

app.use(express.static(path.join(__dirname, 'public')));

const config = require('./config');

const PORT = config.credentials.PORT; // import from bim start.js
var FORGE_CLIENT_ID = 'ZqbXzFL8NMXtovqJrLG0O9f5Ar3nQRoE';
var FORGE_CLIENT_SECRET = 'PM4vPHZGQArq99qn';
const scopes = 'data:read data:write data:create bucket:create bucket:read';

app.use((err, req, res, next) => {
  console.error(err);
  res.status(err.statusCode).json(err);
})

认证文件

const path = require('path');
const express = require('express');
const Axios = require('axios');
const bodyParser = require('body-parser');
const querystring = require('querystring');        

const config = require('../config');

var FORGE_CLIENT_ID = 'ZqbXzFL8NMXtovqJrLG0O9f5Ar3nQRoE';
var FORGE_CLIENT_SECRET = 'PM4vPHZGQArq99qn';
const scopes = 'data:read data:write data:create bucket:create bucket:read';

let router = express.Router();
router.use(bodyParser.json());

module.exports = oauth => {
  return Axios({
      method: 'POST',
      url: 'https://developer.api.autodesk.com/authentication/v1/authenticate',
      headers: {
        'content-type': 'application/x-www-form-urlencoded',
      },
      data: querystring.stringify({
        client_id: FORGE_CLIENT_ID,
        client_secret: FORGE_CLIENT_SECRET,
        grant_type: 'client_credentials',
        scope: scopes
      })
    })
  }

在服务器文件中继续验证

let access_token = '';
var oauth = require('./routes/oauth')
app.get('/api/forge/oauth', function(req, res) {
  oauth()
  .then(function (response) {
      // Success
      // let's save token into the varible access_token
      access_token = response.data.access_token;
      console.log(response);
      console.log(access_token);
      // Then, the app is routed to, which creates a shared bucket for our app.
      res.redirect('/api/forge/datamanagement/bucket/create');
  })
    .catch(function (error) {
      // Failed
      console.error(error);
      res.send('Failed to authenticate');
    });
  });

篮子文件

const path = require('path');
const express = require('express');
const Axios = require('axios');
const bodyParser = require('body-parser');
const querystring = require('querystring');        

const config = require('../config');

const bucketKey = config.credentials.client_id.toLowerCase() + '_my_first_full_viewer_bucket';
const policyKey = 'transient'; // Expires in 24hr


module.exports = bucketCreate => {
  return Axios({
    method: 'POST',
    url: 'https://developer.api.autodesk.com/oss/v2/buckets',
    headers: {
      'content-type': 'application/json',
      Authorization: 'Bearer ' + access_token
    },
    data: JSON.stringify({
      'bucketKey': bucketKey,
      'policyKey': policyKey
    })
  })
}

服务器文件中篮子部分的延续

var bucketCreate = require('./routes/bucketCreate')
app.get('/api/forge/datamanagement/bucket/create', function (req, res) {
bucketCreate()
    .then(function (response) {
      // Success
      console.log(response);
      res.redirect('/api/forge/datamanagement/bucket/detail');
    })
    .catch(function (error) {
      if (error.response && error.response.status == 409) {
        console.log('Bucket already exists, skip creation.');
        res.redirect('/api/forge/datamanagement/bucket/detail');
      }
      // Failed
      console.log(error);
      res.send('Failed to create a new bucket');
    });
});

我无法将服务器文件中的 access_token 值传递到购物篮文件,在那里将进行进一步的操作。我也无法将此变量传递给身份验证文件,所以我四处走动,在服务器文件中获取了部分身份验证文件,并使用服务器文件中的 access_token 执行了操作。错误代码 401(如果我没记错的话,还是 403)。无论如何,我将感谢您的帮助。

node.js
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    b-m-9
    2020-02-06T09:25:36Z2020-02-06T09:25:36Z

    编辑购物车文件

    module.exports = bucketCreate => {
      return Axios({
        method: 'POST',
        url: 'https://developer.api.autodesk.com/oss/v2/buckets',
        headers: {
          'content-type': 'application/json',
          Authorization: 'Bearer ' + access_token
        },
        data: JSON.stringify({
          'bucketKey': bucketKey,
          'policyKey': policyKey
        }).then(response => { 
            return {
               response, // передаем нашу response дальше
               access_token,  // передаем токен
               and_more:'const_test' //также вы можете добавлять еще что либо 
            }
        })
      })
    }
    

    并在您正在使用的文件中,破坏

    bucketCreate()
        .then(function ({response,access_token,and_more}) {
             console.log(response,access_token,and_more)
            // ... ваш код
        })
    
    

    或者

    bucketCreate()
        .then(function (res) {
             console.log(res.response,res.access_token,res.and_more)
            // ... ваш код
        })
    
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5