我想从此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}!`));
答案 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"
}
})