@Alisa94

Как передать значение промиса из одного файла в другой?

Имею плохую ситуацию. Использую express и axios, хочу передать значение промиса но никак не могут. Есть файл сервера, аутентификации и корзинки. Я получая переменную токена доступа в файле сервера и должен передать её функции корзинки. Когда всё пишется в одном файле проблем не возникает, когда я пишу с отдельным файлом аутентификации тоже проблем не возникает, но когда я пишу ещё отдельный файл корзинки, тогда ничего не выходит.

Тело файл сервера

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). В любом случаи буду признателен за помощь.
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
@Abcdefgk
server.js
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');

// Set up Express web server
let app = express();
app.use(bodyParser.json());
// this line say of server, that we run server.js he open html file from public directory
app.use(express.static(path.join(__dirname, 'public'))); // it was static(__ + 'public or www')

// let's importing config.js file where are the configuration for dotenv/env and credentials_id/secret/url/PORT and scopes
const config = require('./config');

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


var oauth = require('./routes/oauth');
var bucketCreate = require('./routes/bucketCreate');

app.get('/api/forge/oauth', function(req, res) {
  oauth()
		.then(function (response) {
				// Success
				// let's save token into the varible access_token
				// Then, the app is routed to, which creates a shared bucket for our app.	
				var access_token = response.data.access_token;
				
				bucketCreate(access_token)
					.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');
					});
			})
      .catch(function (error) {
        // Failed
        console.error(error);
        res.send('Failed to authenticate');
      });
    });
		
		

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

// This is for web server to start listening to port 3000
app.listen(PORT, () => { 
  if (process.env.FORGE_CLIENT_ID == null || process.env.FORGE_CLIENT_SECRET == null) {
    console.log('*****************\nWARNING: Client ID & Client Secret not defined as environment variables.\n*****************');
  }
  console.log(`Server listening on port ${PORT}`);
});

oauth.js
/*
 * Authentication
 */
const Axios = require('axios');
const querystring = require('querystring');        

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

module.exports = function() {
  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: config.credentials.client_id,
      client_secret: config.credentials.client_secret,
      grant_type: 'client_credentials',
      scope: config.scopes.internal
    })
  });
};

backetCreate.js
/*
 * Bucket Creation
 */
const Axios = require('axios');
const config = require('../config');

// Prefix with your ID so the bucket key is unique across all buckets on all other accounts
const bucketKey = config.credentials.client_id.toLowerCase() + '_my_first_full_viewer_bucket';
const policyKey = 'transient'; // Expires in 24hr

  // Create an application shared bucket using access token from previous route
  // We will use this bucket for storing all files in this tutorial

module.exports = function(access_token) {
												console.log('!!!!!!!!!!!!! ' + access_token);
  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
    })
  });
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы