Autodesk Forge扩展实现点击按钮从外部SQL数据库获取数据的方案咨询
问题本质说明
你碰到的require()无法在Forge扩展按钮逻辑里使用的核心原因是:require()是Node.js服务端的模块化语法,而Forge扩展运行在浏览器前端环境,浏览器原生不支持该语法,且数据库操作逻辑本身不允许直接放在前端执行,会泄露数据库权限凭证,存在极高安全风险。
实现路径
按照前后端分离的架构实现即可,整体分为3个核心步骤:
1. 封装服务端数据库查询接口
- 将你已有的数据库查询代码全部放在服务端实现,用Express、Koa等轻量Node.js框架封装成HTTP接口,接口接收查询所需的参数,完成数据库操作后返回JSON格式的结果
- 服务端启动后配置跨域CORS规则,允许你的Forge应用前端地址访问该接口
服务端示例代码:
const express = require('express') const app = express() const sql = require('mssql') // 替换为你实际使用的SQL数据库依赖包 // 配置数据库连接(仅在服务端存储,不会泄露到前端) const dbConfig = { user: '你的数据库账号', password: '你的数据库密码', server: '数据库地址', database: '目标库名' } // 数据库查询接口 app.get('/api/forge-data', async (req, res) => { try { await sql.connect(dbConfig) // 替换为你已有的数据库查询逻辑,可通过req.query获取前端传的查询参数 const result = await sql.query`SELECT * FROM 目标表名` res.json(result.recordset) } catch (err) { res.status(500).json({ error: err.message }) } }) app.listen(3000, () => console.log('服务端运行在端口3000'))
2. 开发Forge扩展按钮逻辑
Forge扩展的按钮触发回调中不需要引入任何数据库相关依赖,直接调用第一步封装的服务端接口即可。
前端按钮点击逻辑示例代码:
// Forge自定义扩展内的按钮点击回调 function onCustomBtnClick() { // 可按需传递查询参数,比如当前选中的构件dbid等 fetch('http://localhost:3000/api/forge-data?dbid=xxx') .then(res => res.json()) .then(data => { // 拿到数据库返回的数据后,自行处理后续业务逻辑,比如在Viewer中高亮构件、展示属性等 console.log('数据库返回数据:', data) }) .catch(err => console.error('请求失败:', err)) }
3. 功能验证
- 先单独启动服务端,直接在浏览器访问接口地址,确认可以正常返回数据库数据
- 再启动Forge前端应用,点击扩展按钮,确认可以正常拉取数据并执行后续业务逻辑
注意事项
- 所有数据库连接凭证、查询逻辑必须全部放在服务端,禁止在前端代码中写入任何数据库敏感信息
- 上线部署时需要给接口增加权限校验逻辑,避免未授权访问
- 如果需要根据模型构件信息查询对应数据,直接将构件的dbid、属性等作为接口参数传递给服务端即可
内容的提问来源于stack exchange,提问作者Maycon Freitas
相关产品推荐
相关产品推荐

