You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:52:36