nginx + PostgreSQL:返回JSON对象

激光脑

我喜欢将PostgreSQL 10服务器作为后端,使用ngx_postgres作为前端的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对象返回?

激光脑

经过几次尝试,我能够通过更改nginx配置来输出JSON。必须安装和加载nginx模块标头-more ,才能正常工作:

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_set_headersnginx提供的结果是有效的JSON。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章