“ message”:“请求失败,状态码为500”,“ name”:“错误”,“ stack”:“错误:请求失败,状态码为500 \ n

时间:2020-02-14 03:51:52

标签: node.js express graphql http-post

我想从此link的开放API中获取数据。根据文档,HTTP方法必须为POST,并且Content-Type必须为“ application / graphql”或“ application / json”。我使用节点快递服务器来获取数据。但是运行服务器时出现错误。我希望通过此API在浏览器上显示一个位置到另一个位置之间的公交时间表。

Ps。我从未获取过Graphql开放式api。

   const express = require("express");
const app = express();
const port = 3000;
const bodyParser = require("body-parser");
const axios = require("axios");
const morgan = require("morgan");
const cors = require("cors");

app.use(morgan("common"));
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));

const url = "https://api.digitransit.fi/routing/v1/routers/hsl/index/graphql";
app.get("/hsl/timetables", async (req, res, next) => {
  axios
    .get(url, {
      method: "POST",
      headers: {
        Accept: "application/json, text/plain, */*",
        "Content-Type": "application/graphql"
      }
    })
    .then(response => res.send(response.data))
    .catch(err => {
      console.log("catch error", err), res.status(500).send(err);
    });
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

1 个答案:

答案 0 :(得分:0)

如果您在Axios文档here中注意到,则无需在选项中使用该方法。 (删除此method: "POST",)。

此外,您将希望将请求更改为.post(而不是像以前那样的.get(

您还需要在请求中包括一个正文。这是您需要弄清楚所需内容的地方。我不确定您要显示的路线,但例如,

let data = {
  routes(name: "10") {
    gtfsId
    shortName
    longName
    mode
  }
}

您可以找到许多示例,说明所需查询的数据内容

要全部添加,您将具有以下内容:

axios.post(url, data, {
    headers: {
        Accept: "application/json, text/plain, */*",
        "Content-Type": "application/graphql"
    }
})