我喜欢将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_headers
。nginx提供的结果是有效的JSON。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句