客户端Javascript调用Postgresql存储过程

时间:2011-11-09 04:54:17

标签: javascript postgresql stored-procedures

我有一个Postgresql作为数据库的桌面应用程序。业务逻辑主要在存储过程中。因此,存储过程充当桌面应用程序的API。

现在,我想创建一个基于Web的应用程序子集版本,以便用户能够在移动设备上运行它。但客户端javascript无法直接访问数据库,因此我必须开发HTTP Web服务。因为这是一个局域网应用程序,我认为开发一个“正常”的Web API最多被5个用户使用是一种矫枉过正。所以我正在考虑创建一个Web服务,它只是解析通过HTTP从javascript发送的存储过程字符串,并返回格式化为JSON的表。

以下是它的工作原理:Web浏览器+ Javascript - >网络服务 - > DB +存储过程

客户端javascript将以这种格式传递给Web服务字符串:

storproc_name; dbtype1, arg1; dbtype2, arg2; dbtype3, arg3; ... and so on

Web服务将字符串解析为:

storproc_name(arg1, arg2, arg3, ...)

并返回一条json消息:

{
    {
        { column_name: value}
        { column_name: value}
        { ... }
    }
    {
        ...
    }
}

示例:

fn_login; varchar(32), admin; varchar(50), password;

由Web服务解析为:

fn_login('admin', 'password') 

并返回:

{
    {
        { code: 1 }
        { session_token: 'theusertokenusedtoaccessotherstoredprocedures' }
    }
}

然后用户可以使用会话令牌执行其他操作

fn_list_products_by_category_id; varchar(50), theusertokenusedtoaccessotherstoredprocedures; integer, 2;

fn_list_products_by_category_id('theusertokenusedtoaccessotherstoredprocedures', 2)

{
    {
        { product_id: 101 }
        { product_name: "book" }
    }
    {
        ...
    }
}

我知道这是一种非标准的做法。我看不出这种方法有任何明显的缺陷。但任何意见都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

查看https://github.com/brianc/node-postgres.git

- 编辑 -

它是服务器端,但即使是LAN应用程序,您实际上也不希望在客户端上使用连接凭据。有了像node-Postgres这样的东西(还有很多其他的东西要看),你的客户端只需要向你的数据库服务器发出http请求。这将为您省去“解析存储过程字符串”并手动尝试设置所有内容的麻烦。几个月前,我正在玩类似的东西并合作进行概念验证:https://github.com/OrlandoPg/listen-notify。它不完全是你想要做的,但以它作为起点,你可以很快完成你的目标。

1)在数据库服务器或连接到数据库的连接池上安装节点和依赖项 2)设置节点服务以代理所有SP呼叫。 3)从客户端查询和处理结果。

Node和socket.io会为您处理所有管道,包括身份验证(如果您需要)。在您的情况下,您可以像我一样发出单个侦听查询,例如,您可以根据事件名称执行存储过程。我认为像这样的方法可以使客户端代码更轻,并且比在客户端中执行所有操作的安全风险更小。