关于Autodesk Tandem-Viewer-React-2Legged部署报错的技术咨询
问题解决指南
1. 解决Node.js运行TypeScript ES模块的问题
你遇到的.ts扩展名错误,是因为Node.js原生不支持直接运行TypeScript文件,即便设置了"type": "module"也无法解析TS语法。正确处理方式如下:
- 先安装依赖:
npm install ts-node typescript --save-dev - 修改
package.json的启动脚本,用ts-node的ES模块模式运行:"scripts": { "start": "ts-node-esm server.ts" } - 同步调整
tsconfig.json的ES模块配置:{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2020", "esModuleInterop": true } }
不需要把server.ts改成.mjs,保持TS文件格式即可正常运行。
2. 解决Tandem API跨域报错问题
这个CORS错误的核心是:前端直接请求Tandem API时,浏览器会带上凭证(withCredentials: true),但Tandem API返回的Access-Control-Allow-Origin是通配符*,而浏览器规则明确禁止带凭证的跨域请求使用通配符作为允许源。
正确方案是用后端做代理转发:
- 前端不要直接调用
https://tandem.autodesk.com/api/v1/groups,改为请求本地后端的代理接口(比如http://localhost:3000/api/tandem/groups) - 在
server.ts中添加代理逻辑,接收前端请求后,带上APS/Tandem的认证令牌转发到官方API,再把响应返回给前端。这样浏览器只和同域的后端通信,不会触发跨域限制。
示例Express代理逻辑:
import express from 'express'; import axios from 'axios'; const app = express(); // 代理Tandem分组请求 app.get('/api/tandem/groups', async (req, res) => { try { // 先通过2legged流程获取访问令牌(根据你的认证逻辑实现) const token = await getTwoLeggedToken(); // 转发请求到Tandem官方API const tandemRes = await axios.get('https://tandem.autodesk.com/api/v1/groups', { headers: { 'Authorization': `Bearer ${token}` } }); // 将结果返回给前端 res.json(tandemRes.data); } catch (err) { res.status(err.response?.status || 500).json(err.response?.data || { msg: '请求失败' }); } }); app.listen(3000, () => console.log('Server running on port 3000'));
- 前端代码中把请求地址改为
/api/tandem/groups,无需再设置withCredentials。
额外提醒
作为APS/Tandem新手,建议牢记:2legged认证的密钥必须保存在后端,前端通过后端获取令牌或代理请求API,既避免密钥泄露,也能从根源解决跨域问题。
内容的提问来源于stack exchange,提问作者Apocrypheus
相关产品推荐
相关产品推荐

