首页 > 解决方案 > 节点 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}`))

标签: javascriptnode.jsreactjs

解决方案


您的 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)
      }
    })

推荐阅读