javascript - 节点 FetchError:无效的 json 响应正文 - JSON 中的意外令牌 <
问题描述
当我试图从我的服务器路由中获取响应时,我收到了这个错误:FetchError: invalid json response body - unexpected token < in JSON
我认为问题是我什么时候做的response.json()
?
当我使用 Postman 到达同一个端点时,我得到了我想要的响应。这里发生了什么?
注意:我的 api 令牌可以公开使用
服务器.js
const express = require('express')
const path = require('path')
const bodyParser = require('body-parser')
const fetch = require('node-fetch')
const app = express()
const port = process.env.PORT || 5000
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
const TRANSLINK_TOKEN = 'j2bXKzENILvyoxlZ399I'
const TRANSLINK_URL = 'http://api.translink.ca/rttiapi/v1/buses?apikey='
// API routes
app.get('/buses/location', (req, res) => {
const apiURL = `${TRANSLINK_URL}${TRANSLINK_TOKEN}`
console.log(apiURL)
fetch(apiURL)
.then(response => {
if (response.ok) {
console.log("response ok")
response.json()
.then((data) => {
res.json(data)
})
}
else {
res.sendStatus(response.status)
}
})
.catch(error => {
console.log(error)
alert(error.message)
})
})
app.listen(port, () => console.log(`Listening on port ${port}`))
解决方案
您的 API 返回 XML 而不是 json,请确保 apiURL 返回有效的 json 对象
要检查响应,请放在console.log(data)
前面res.json(data)
您可以使用XML2JSON包将响应转换为 json 格式或使用res.send(data)
原样检索 xml 响应
fetch(apiURL)
.then(response => {
if (response.ok) {
console.log("response ok");
console.log(response.body);
// Add XML2JSON to convert body
res.send(response.body);
}
else {
res.sendStatus(response.status)
}
})
推荐阅读
- java - 用 iText 5 替换 pdf 中的空格
- dart - 如何在颤动的流中返回对象列表
- javascript - Python Jinja2从后端分配javascript var
- php - 存储中的模拟文件以在 Laravel 中下载
- javascript - jsperf:未捕获的 HierarchyRequestError:无法在“节点”上执行“appendChild”:此节点类型不支持此方法
- html - 扩展 base.html 后,我的孩子 html 的东西没有显示
- java - 不能在子进程中将 HashMap 用于 TIMESTAMP
- docker - 将独立客户端构建输出同步到一个 docker Web 服务器构建
- vue.js - 为什么在将数据分配给变量时计算会更改数据?
- c# - redis设置相同的key,性能问题?