该问题与将 server.js 文件拆分为模块有关。我正在使用 autodesk.forge 平台查看器,并根据我创建此查看器的文档。要创建服务器,使用 express 和 axios(嗯,其他技术,但问题与提到的技术有关)。我还创建了一个公用文件夹,其中包含一个带有身份验证超链接的 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());
app.use(express.static(path.join(__dirname, '/public')));
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) {
// Success
// let's save token into the varible access_token
access_token = response.data.access_token;
console.log(response);
// 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.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) {
// Success
// let's save token into the varible access_token
access_token = response.data.access_token;
console.log(response);
res.redirect('/api/forge/datamanagement/bucket/create');
})
.catch(function (error) {
// Failed
console.log(error);
res.send('Failed to authenticate');
});
});
module.exports = router;
分成模块的代码是这样工作的:服务器从 3000 端口开始,页面显示为一个超链接,点击它后,一个页面打开,显示文本“Cannot GET /api/forge/oauth”。我检查并确保主文件中包含 oauth.js 模块,但我不明白为什么 axios 找不到 /api/forge/oauth 页面。
服务器文件对我来说没有问题,但是当我将其拆分为模块时,就会出现问题。
烤面包机的兄弟帮忙,这是解决方案。
否则,您将获得 URL “/api/forgee/api/forge/oauth”