Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端Javascript调用Postgresql存储过程_Javascript_Postgresql_Stored Procedures - Fatal编程技术网

客户端Javascript调用Postgresql存储过程

客户端Javascript调用Postgresql存储过程,javascript,postgresql,stored-procedures,Javascript,Postgresql,Stored Procedures,我有一个以Postgresql为数据库的桌面应用程序。业务逻辑主要在存储过程中。因此,存储过程充当桌面应用程序的API 现在,我想创建应用程序子集的基于web的版本,以便用户能够在移动设备上运行它。但客户端javascript不能直接访问数据库,所以我必须开发一个HTTP web服务。因为这是一个局域网应用程序,我认为开发一个“普通”的web API供最多5个用户使用是一种过分的做法。因此,我正在考虑创建一个web服务,它只解析通过HTTP从javascript发送的存储过程字符串,并返回格式为

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

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

它的工作原理如下:Web浏览器+Javascript-->Web服务-->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" }
    }
    {
        ...
    }
}
我知道这是一种非标准做法。我看不出这种方法有任何明显的缺陷。但是,如果您有任何意见,我们将不胜感激。

请查看

--编辑--

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

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


Node和socket.io为您处理所有的管道,包括身份验证(如果您需要)。在您的示例中,您可以基于事件名执行存储过程,而不是像我一样发出一个侦听查询。我认为这样的方法会使客户端代码变得更轻,并且比在客户端做任何事情都具有更少的安全风险。

Node Postgres用于服务器端javascript,不是吗?我想公开Postgresql存储过程,以便客户端javascript可以通过HTTP协议直接使用它们。您找到解决方案了吗?我正在采取类似的方法来开发一个网站。