Проблема связана с разделением server.js файла на модули. Я работаю на просмотрщиком(viewer) платформы autodesk.forge и по
документации создал этот просмотрщиком. Для создания сервера используется express и axios(ну и другие технологии, но проблема связано с упомянутыми технологиями). Так же создал папку public, в ней html файл с гиперссылкой аутентификации.
Ниже приведу рабочий код.
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());
const config = require('./config');
const PORT = config.credentials.PORT;
app.set('port', 3000);
let server = app.listen(PORT, () => { console.log(`Server listening on port ${PORT}`); });
let access_token = '';
if (process.env.FORGE_CLIENT_ID == null || process.env.FORGE_CLIENT_SECRET == null) {
console.error('Missing FORGE_CLIENT_ID or FORGE_CLIENT_SECRET env. variables.');
return;
}
app.get('/api/forge/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: config.credentials.client_id,
client_secret: config.credentials.client_secret,
grant_type: 'client_credentials',
scope: config.scopes.internal
})
})
.then(function (response) {
access_token = response.data.access_token;
console.log(response);
res.redirect('/api/forge/datamanagement/bucket/create');
})
.catch(function (error) {
console.log(error);
res.send('Failed to authenticate');
});
});
<body>
<main id="main">
<a href="/api/forge/oauth">Authorize me!</a>
</main>
</body>
После дробления этого кода на модуль он перестаёт работать, вот изменённый 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;
app.use('/api/forgee', 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 querystring = require('querystring');
const config = require('../config');
let router = express.Router();
let access_token = '';
if (process.env.FORGE_CLIENT_ID == null || process.env.FORGE_CLIENT_SECRET == null) {
console.error('Missing FORGE_CLIENT_ID or FORGE_CLIENT_SECRET env. variables.');
return;
}
router.get('/api/forge/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: config.credentials.client_id,
client_secret: config.credentials.client_secret,
grant_type: 'client_credentials',
scope: config.scopes.internal
})
})
.then(function (response) {
access_token = response.data.access_token;
console.log(response);
res.redirect('/api/forge/datamanagement/bucket/create');
})
.catch(function (error) {
console.log(error);
res.send('Failed to authenticate');
});
});
module.exports = router;
Разделённый на модули код работает так: сервер запускается на порту 3000, появляется страницы гиперссылкой, после нажатия на неё открывается страница с текстом "Cannot GET /api/forge/oauth". Я проверял и убеждался, что модуль oauth.js подключён к основному файлу, но почему axios не может найти страницу /api/forge/oauth я не понимаю.
У меня файл сервера работает без проблем, но когда дроблю на модули появляются проблемы.