React JS Fetch返回空响应但邮递员不返回

时间:2017-09-11 20:42:36

标签: laravel reactjs post promise fetch-api

我有一个React JS应用程序试图登录基于令牌的API(我也在使用Laravel 5.5和Laravel Passport进行开发)。我正在尝试实现基本登录(使用用户名和密码登录,验证后从服务器接收令牌,将该令牌用于将来的查询)。

我用来获取的代码如下:

function loginApi(username, password) {
    return fetch(loginUrl, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            grant_type: 'password',
            client_id: clientId,
            client_secret: clientSecret,
            username: username,
            password: password
        })

   }).then(handleApiErrors)
     .then(response => response.json)
}

值得注意的是,

我已经解决了遇到的正常问题,比如CORS问题,但我现在遇到的问题是来自API的响应只是......空的。即使在Chrome的开发人员工具的“网络”标签中,如果我直接检查请求,则响应为空。

dev tools 1

dev tools 2

然而,如果我与Postman进行完全相同的相同查询,结果正是我所期望的。

postman

这可能是什么问题?为什么完全相同的查询会返回不同的结果?

2 个答案:

答案 0 :(得分:7)

.json是一个函数,需要调用。尝试..

.then(response => response.json())

您当前正在返回.json解析函数。

答案 1 :(得分:1)

我已成功通过以下方式对其进行了修复:

客户端(使用React和Fetch-API)

const update = async (credentials, productData) => {
  try {
    let response = await fetch('/api/products/', {
      method: 'PUT',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + credentials.t
      },
      body: productData
    })
    return await response.json()
  } catch (err) {
    console.log(err)
  }
}

服务器端(Nodejs,带有Express):

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors())
...