客户端Javascript调用Postgresql存储过程
我有一个以Postgresql为数据库的桌面应用程序。业务逻辑主要在存储过程中。因此,存储过程充当桌面应用程序的API 现在,我想创建应用程序子集的基于web的版本,以便用户能够在移动设备上运行它。但客户端javascript不能直接访问数据库,所以我必须开发一个HTTP web服务。因为这是一个局域网应用程序,我认为开发一个“普通”的web API供最多5个用户使用是一种过分的做法。因此,我正在考虑创建一个web服务,它只解析通过HTTP从javascript发送的存储过程字符串,并返回格式为JSON的表 它的工作原理如下:Web浏览器+Javascript-->Web服务-->DB+存储过程 客户端javascript将以以下格式传递给web服务字符串:客户端Javascript调用Postgresql存储过程,javascript,postgresql,stored-procedures,Javascript,Postgresql,Stored Procedures,我有一个以Postgresql为数据库的桌面应用程序。业务逻辑主要在存储过程中。因此,存储过程充当桌面应用程序的API 现在,我想创建应用程序子集的基于web的版本,以便用户能够在移动设备上运行它。但客户端javascript不能直接访问数据库,所以我必须开发一个HTTP web服务。因为这是一个局域网应用程序,我认为开发一个“普通”的web API供最多5个用户使用是一种过分的做法。因此,我正在考虑创建一个web服务,它只解析通过HTTP从javascript发送的存储过程字符串,并返回格式为
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" }
}
{
...
}
}
我知道这是一种非标准做法。我看不出这种方法有任何明显的缺陷。但是,如果您有任何意见,我们将不胜感激。请查看
--编辑--
它是服务器端,但即使是LAN应用程序,您也不希望在客户端上使用连接凭据。有了node Postgres(还有很多其他的东西要看),您的客户机只需向db服务器发出http请求。这将省去“解析存储过程字符串”和手动设置所有内容的麻烦。几个月前,我在玩类似的东西,并合作进行概念验证:。这并不完全是你想要做的,但用它作为起点,你可以很快完成你的目标
1) 在数据库服务器或连接到数据库的连接池上安装节点和依赖项
2) 设置节点服务以代理所有SP调用。
3) 从客户端查询并处理结果
Node和socket.io为您处理所有的管道,包括身份验证(如果您需要)。在您的示例中,您可以基于事件名执行存储过程,而不是像我一样发出一个侦听查询。我认为这样的方法会使客户端代码变得更轻,并且比在客户端做任何事情都具有更少的安全风险。Node Postgres用于服务器端javascript,不是吗?我想公开Postgresql存储过程,以便客户端javascript可以通过HTTP协议直接使用它们。您找到解决方案了吗?我正在采取类似的方法来开发一个网站。