GeoJSON解析节点

时间:2017-10-31 02:42:07

标签: node.js geojson

我收到500错误'发生了意外问题'当我使用节点应用程序解析来自此weather API站点的GeoJSON数据时。

代码是一个简单的代理服务器,用于接收来自客户端的特定站点上的天气信息请求,并在收到响应并向客户端发送响应时处理对weatherAPI的异步请求。当我用返回JSON的东西替换URL时,它可以工作。问题是响应数据是GeoJSON。

感谢是否有人帮助阐明了如何在节点JavaScript中解析GeoJSON响应。

提前谢谢。

这是我的节点应用代码:

function initialize() {
    // Setting URL and headers for request
    var options = {
        url: 'https://api.weather.xxx/points/39.7456,-97.0892',
        headers: {
            'User-Agent': 'request'
        }
    };
    // Return new promise
    return new Promise(function(resolve, reject) {
        // Do async job
        request.get(options, function(err, resp, body) {
            if (err) {
                reject(err);
            } else {
                resolve(JSON.parse(body));
            }
        })
    })
}

http.createServer(function (req, res) {
   var initializePromise = initialize();
   initializePromise.then(function(result) {
       var geoDetails = result;
       console.log("Initialized Geo details");
       // Use user details from here
       console.log(geoDetails);
       res.writeHead(200, { 'Content-Type': 'text/plain' });
       res.write('request successfully proxied!' + '\n' + 
          JSON.stringify(geoDetails, true, 2));
       res.end();
   }, function(err) {
       console.log(err);
   })
}).listen(9000);

以下是GeoJSON数据:

{
    "@context": [
        "...",
        {
            "wx": "...",
            "s": "...",
            "geo": "...",
            "unit": "...",
            "@vocab": "...",
            "geometry": {
                "@id": "s:GeoCoordinates",
                "@type": "geo:wktLiteral"
            },
            "city": "s:addressLocality",
            "state": "s:addressRegion",
            "distance": {
                "@id": "s:Distance",
                "@type": "s:QuantitativeValue"
            },
            "bearing": {
                "@type": "s:QuantitativeValue"
            },
            "value": {
                "@id": "s:value"
            },
            "unitCode": {
                "@id": "s:unitCode",
                "@type": "@id"
            },
            "forecastOffice": {
                "@type": "@id"
            },
            "forecastGridData": {
                "@type": "@id"
            },
            "publicZone": {
                "@type": "@id"
            },
            "county": {
                "@type": "@id"
            }
        }
    ],
    "id": "...api.weather.xxx/points/39.7456,-97.0892",
    "type": "Feature",
    "geometry": {
        "type": "Point",
        "coordinates": [
            -97.0892,
            39.7456
        ]
    },
    "properties": {
        "@id": "...api.weather.xxx/points/39.7456,-97.0892",
        "@type": "wx:Point",
        "cwa": "TOP",
        "forecastOffice": "...api.weather.xxx/offices/TOP",
        "gridX": 31,
        "gridY": 80,
        ...
        "relativeLocation": {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    -97.086661,
                    39.679376
                ]
            },
            "properties": {
                "city": "Linn",
                "state": "KS",
                "distance": {
                    "value": 7366.9851976444,
                    "unitCode": "unit:m"
                },
                "bearing": {
                    "value": 358,
                    "unitCode": "unit:degrees_true"
                }
            }
        },
       ...
    }
}

我有兴趣以纯文本或JSON获取所有属性。

2 个答案:

答案 0 :(得分:1)

将标题修改为accept JSON。

var options = {
    url: 'https://api.weather.gov/points/39.7456,-97.0892',
    headers: {
        'user-agent': 'request',
        'accept': 'application/json'
    }
};

答案 1 :(得分:-1)

将内容类型标头设置为application/json会有所帮助。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type