@Alisa94

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

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

Ниже приведу эти файлы.

server.js
const path = require('path');
const express = require('express');       
const Axios = require('axios');             
const bodyParser = require('body-parser');   
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; 
var FORGE_CLIENT_ID = 'myID';
var FORGE_CLIENT_SECRET = 'mySecret';
const scopes = 'data:read data:write data:create bucket:create bucket:read';


app.use('/api/forge', require('./routes/oauth'));
app.use((err, req, res, next) => {
  console.error(err);
  res.status(err.statusCode).json(err);
});


let server = app.listen(PORT, () => { console.log(`Server listening on port ${PORT}`) });


oauth.js

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 = 'myId';
var FORGE_CLIENT_SECRET = 'mySecret';
const scopes = 'data:read data:write data:create bucket:create bucket:read';

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

let access_token = '';

router.get('/oauth', function (req, res) {
  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
    })
  })
  .then(function (response) {
    access_token = response.data.access_token;
    console.log(response);
    res.redirect('/api/forge/datamanagement/bucket/create');
  })
  .catch(function (error) {
    // Failed
    console.error(error);
    res.send('Failed to authenticate');
  });
});

module.exports = router;


Чтобы продолжить аутентификацию я должен получить переменную access_token из файла oauth.js в файле server.js. Перепробовал все способы(которые я знал), но не получается. За любую помощь буду очень признателен.
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
@Abcdefgk
Принкцип такой.
Пишешь модуль oauth.js, который выглядит так:
const Axios = require('axios');             
const querystring = require('querystring');

var FORGE_CLIENT_ID = 'myId';
var FORGE_CLIENT_SECRET = 'mySecret';
const scopes = 'data:read data:write data:create bucket:create bucket:read';

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: FORGE_CLIENT_ID,
      client_secret: FORGE_CLIENT_SECRET,
      grant_type: 'client_credentials',
      scope: scopes
    })
  });
};

И в том месте, где он нужен, его вызываешь с продолжением
require('./oauth')
  .then(function (response) {
    access_token = response.data.access_token;
  })
  .catch(...

Сам принкцип. А что должно быть за продолжение, где, какой-то редирект в then - куда? Это у тебя ничего не понятно. Тут проблема в самой общей конструкции (а не в синтаксисе-шминтаксисе, конечно).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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