【问题标题】:How to show a json object returned from the server如何显示从服务器返回的 json 对象
【发布时间】:2018-12-20 02:07:06
【问题描述】:

当 HTTP 状态不是 200 时,如何获取后端在前端代码中发送的 JSON 对象?

当我的后端发送 200 响应时,我可以通过这样做来显示返回的 JSON 数据:

后端

res.status(200).json({status: 'Information found'})

前端

.then(data => console.log(data.status)) // Information found

但是,当我尝试对 400 或 404 状态执行相同操作时,我无法获得返回的 JSON。

后端

res.status(404).json({error: 'No information found'});

前端

.catch(error => console.log('Error from backend', error))

结果

我第一次尝试了 error.error,但没有定义。

与 200 状态返回有什么区别?如何在前端获取从后端发送的消息?

编辑

前端

    axios.post('https://firebaselink.net/getTestData', { id: orderNumber })
        .then(data => console.log(data.status))
        .catch(error => console.error(error))

后端

  export const getTestData = functions.https.onRequest((req, res) => {
    cors(req, res, () => {
      const id = req.body.id;

      admin.database().ref(`data/${id}`).once('value')
        .then(snapshot => {
          if(snapshot) res.status(200).json({status: "Information found"})
          else res.status(404).json({error: "Information not found"})
        }).catch(error => res.status(500).json({error: 'Internal error}))
    })
  })

【问题讨论】:

  • 前端promise是如何创建的?
  • 答案取决于您用来发出请求的库。你在调用什么 .then() ?
  • @Hodrobond 不知道您使用的是什么浏览器,但 console.log(a) 对我来说很好
  • 不要破坏您的问题,但您似乎没有向响应正文添加任何无法从响应状态推断的额外信息,即 404 = "not found", 500 = "internal服务器错误”等

标签: javascript json frontend axios backend


【解决方案1】:

问:我尝试了 error.error,但未定义。如何打印我的错误?

答: Javascript 没有类型,这意味着 object 可以是任何东西。这里最好的解决方案是执行console.log(JSON.stringify(error, null, 2) 以查看它具有什么属性,然后访问以打印出消息。

error 对象通常具有 message 属性。

参考文献

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error

【讨论】:

  • console.error(error)(或者像 OP 所说的 console.log('Error from backend', error))应该产生与通过 JSON.stringify 传递对象一样多的信息(如果不是更多)。
  • 仅供参考@Phil 初始发布不包含代码console.error
  • console.logconsole.error,没关系;后者只是让它变红
  • 不合理。关于error.error 的初始发布导致error 属性未定义。因此,使用了在不知道console.logconsole.error 的情况下检查对象属性的解决方案。
  • 对不起,我不明白你的评论。澄清一下,OP 有console.log('Error from backend', error)。这将显示至少与console.log(JSON.stringify(error, null, 2)) 相同数量的数据,但也将包括任何方法和瞬态数据。因此,您的回答提供的信息比 OP 已经知道的要少
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多