老师, fetch可以在解析httpstatus的同时得到body吗

来源:17-1 快速使用HTML代码块

慕哥8298992

2017-05-24

您这个例子和官方的是差不多的

function checkStatus(response) {
  if (response.status >= 200 && response.status < 300) {
    return response
  } else {
    var error = new Error(response.statusText)
    error.response = response
    throw error
  }
}
 
function parseJSON(response) {
  return response.json()
}
 
fetch('/users')
  .then(checkStatus)
  .then(parseJSON)
  .then(function(data) {
    console.log('request succeeded with JSON response', data)
  }).catch(function(error) {
    console.log('request failed', error)
  })


我希望当http code为400的时候, 得到相应的json数据, 展示给开发人员, 因为400这种错误就是传参不对导致的, 我返回的例子是: 

{

code: -1,

msg: '密码不能为空',

data: null

}


{

code: -2,

msg: '性别编码不是系统定义的',

data: null

}


当200的时候

{

code: 0

msg: 'ok',

data: {createdUser: {id...name....}}

}


{

code: 20

msg: '系统已存在该用户不能注册',

data: null

}


总之, 400的时候一般是开发人员不按照接口文档开发造成的错误, 让他自己解决, 不要打扰后端程序员,  200代表接口调用成功, 但是业务有可能错误的

他这2个then能不能合并成一个啊, 要不没法解决我的问题, 因为执行第一个then的时候我要调用第二个then中的数据

写回答

2回答

慕哥8298992

提问者

2017-05-24

老师, 我不太明白你说的啊, 

我服务器端这边是springboot开发的, 统一异常处理针对客户端传递参数错误设定的规则是: 返回400, 然后json中有具体的错误信息, 我如果通过fetch读取呢?

then(response => 在这里判断如果是400, 那么读取json中的msg属性然后终止then, 弹出对话框展示json.msg

then(response => response.json)

then.....

0
1
Parry
最后一个 then 里就可以直接读取 json 属性啊,你的情况是读取不到?
2017-05-24
共1条回复

Parry

2017-05-24

400 是页面找不到,还怎么返回啊?也就是说用户页面输入错误了你要告诉用户不对?

这个在接口后面写个 url 重写,然后返回就可以了。

0
2
Parry
回复
慕哥8298992
你贴给我的源码不是已经做错误处理了吗?我以为你说的是其他情况的处理啊。
2017-05-26
共2条回复

结合基础与实战学习React.js 独立开发新闻头条平台

轻松入门 React 开发,React Router 4 与 Webpack 2 完美升级项目

2768 学习 · 2126 问题

查看课程