nginx+;PostgreSQL:返回JSON对象

nginx+;PostgreSQL:返回JSON对象,json,postgresql,nginx,jsonb,Json,Postgresql,Nginx,Jsonb,我喜欢将PostgreSQL 10服务器作为后端运行,将nginx作为前端运行。数据库以JSONB格式存储数据: =# CREATE TABLE dump ( id bigserial primary key, data jsonb not null ); 可以按如下方式查询数据: =# SELECT data FROM dump; 使用ngx_postgres,可以直接从nginx访问PostgreSQL数据库: upstream postgresql {

我喜欢将PostgreSQL 10服务器作为后端运行,将nginx作为前端运行。数据库以JSONB格式存储数据:

=# CREATE TABLE dump (
   id   bigserial primary key,
   data jsonb     not null
);
可以按如下方式查询数据:

=# SELECT data FROM dump;
使用ngx_postgres,可以直接从nginx访问PostgreSQL数据库:

upstream postgresql {
    postgres_server localhost dbname=default user=user password=secret;
}

server {
    listen 80;

    location /postgresql/ {
        rds_json          on;

        postgres_pass     postgresql;
        postgres_query    HEAD GET "SELECT data FROM dump"
        postgres_rewrite  no_rows 410;
        postgres_output   rds;
    }
}
但结果以文本形式返回,带有转义双引号,而不是JSON:

[{"data":"{\"id\": \"00ce160e5cbb49b9bc2ee6f243f87841\", \"name\": \"foo\"}"}] 

如何将查询结果作为JSON对象返回?

您可以尝试c2h5oh框架。它是一个快速轻量级的框架,用于使用Nginx和PostgresSQL的强大功能构建web应用程序


您可以尝试c2h5oh框架。它是一个快速轻量级的框架,用于使用Nginx和PostgresSQL的强大功能构建web应用程序


经过多次尝试,我能够通过更改nginx配置输出JSON。必须安装并加载nginx模块,才能使其正常工作:

server {
    listen 80;

    location /postgresql/ {
        rds_json          off;

        postgres_pass     postgresql;
        postgres_query    HEAD GET "SELECT json_agg(data) FROM dump"
        postgres_rewrite  no_rows 410;
        postgres_output   text;
        more_set_headers  'content-type: application/json';
    }
}

首先,PostgreSQL输出格式必须设置为
text
。然后,必须使用
more\u set\u headers
覆盖默认内容类型。nginx提供的结果是有效的JSON。

经过多次尝试,我能够通过更改nginx配置输出JSON。必须安装并加载nginx模块,才能使其正常工作:

server {
    listen 80;

    location /postgresql/ {
        rds_json          off;

        postgres_pass     postgresql;
        postgres_query    HEAD GET "SELECT json_agg(data) FROM dump"
        postgres_rewrite  no_rows 410;
        postgres_output   text;
        more_set_headers  'content-type: application/json';
    }
}
首先,PostgreSQL输出格式必须设置为
text
。然后,必须使用
more\u set\u headers
覆盖默认内容类型。nginx提供的结果是有效的JSON