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

Confluence与PostgreSQL整合及用户输入写入DB的技术求助(REST API优先)

解决思路:Confluence前端表单数据写入PostgreSQL(基于现有空间数据源)

针对你已通过空间数据源+SQL宏实现数据读取,但无法写入的问题,以下是几种无需大幅改动Confluence后端的可行方案,按推荐优先级排序:


1. 自定义用户宏(User Macro)+ 前端JS(推荐,复用现有空间数据源)

利用Confluence的用户宏能力,结合前端JS处理表单提交,直接调用已配置的空间数据源执行写入操作,完全复用现有数据库连接,无需额外后端改动。

实现步骤:

步骤1:创建用户宏

在Confluence空间的「宏管理」中新建用户宏,设置宏类型为「渲染HTML」,允许使用JavaScript,然后填入以下模板代码(根据你的表结构调整):

## User Macro: SubmitToDatabase
## 宏描述:接收前端表单数据,写入PostgreSQL

#set($formId = "db-submit-form")
#set($macroActionUrl = "$actionContext/macros/execute?macroId=submit-to-database")

<!-- 前端表单 -->
<form id="$formId">
  <label>用户名:</label>
  <input type="text" name="username" required placeholder="请输入用户名">
  <br>
  <button type="button" onclick="handleSubmit()">提交数据</button>
</form>

<!-- 提交逻辑JS -->
<script>
function handleSubmit() {
  const form = document.getElementById("$formId");
  const formData = new FormData(form);
  
  fetch("$macroActionUrl", {
    method: "POST",
    body: formData
  })
  .then(res => res.text())
  .then(result => {
    alert(result);
    form.reset();
  })
  .catch(err => console.error("提交失败:", err));
}
</script>

<!-- 后端处理POST请求 -->
#if($request.method == "POST")
  #set($username = $esc.xml($request.getParameter("username"))) <!-- 转义避免SQL注入 -->
  #if($username)
    #set($sql = "INSERT INTO your_table(username) VALUES ('$username')")
    #set($affectedRows = $spaceDataSource.executeUpdate($sql)) <!-- 调用空间数据源执行写入 -->
    
    #if($affectedRows > 0)
      数据写入成功!
    #else
      写入失败,请检查数据源权限或SQL语句
    #end
  #else
    请填写必填字段
  #end
#end

步骤2:配置注意事项

  • 确保空间数据源的数据库账号拥有INSERT/UPDATE权限;
  • 必须用$esc.xml()转义用户输入,避免SQL注入风险;
  • 宏创建后,直接在Confluence页面插入该宏即可使用。

2. 第三方表单+数据库集成宏插件

如果不想写代码,可以直接在Atlassian Marketplace搜索支持「表单提交+数据库写入」的宏插件(如Form Builder for Confluence、Database Forms & Reports),这类插件:

  • 可直接关联你已配置的空间数据源;
  • 通过拖拽配置表单字段与数据库表字段的映射;
  • 无需编写任何代码,直接在页面配置提交动作即可实现写入。

3. 轻量中间层服务(完全不改动Confluence后端)

如果上述方案受限,可以搭建一个极简的中间层服务(如Python Flask/Java Spring Boot小服务),负责接收Confluence前端的AJAX请求,执行数据库写入操作。

示例(Python Flask):

from flask import Flask, request
import psycopg2

app = Flask(__name__)

@app.route('/submit-to-db', methods=['POST'])
def submit_data():
    username = request.form.get('username')
    if not username:
        return "请输入用户名", 400
    
    try:
        # 连接PostgreSQL(替换为你的数据库信息)
        conn = psycopg2.connect(
            dbname="your_db",
            user="your_user",
            password="your_pass",
            host="your_db_host"
        )
        cur = conn.cursor()
        # 参数化查询避免SQL注入
        cur.execute("INSERT INTO your_table(username) VALUES (%s)", (username,))
        conn.commit()
        cur.close()
        conn.close()
        return "数据写入成功"
    except Exception as e:
        return f"写入失败:{str(e)}", 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

然后在Confluence页面添加前端代码,调用该中间层API:

<form id="db-form">
  <input type="text" name="username" placeholder="用户名">
  <button type="button" onclick="sendData()">提交</button>
</form>

<script>
function sendData() {
  const formData = new FormData(document.getElementById('db-form'));
  fetch('http://your-middle-server:5000/submit-to-db', {
    method: 'POST',
    body: formData
  })
  .then(res => res.text())
  .then(msg => alert(msg));
}
</script>

内容的提问来源于stack exchange,提问作者tonyStark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:35:27