2017-09-11 35 views
0

我有一个React JS应用程序试图登录到基于令牌的API(我也在开发中,使用Laravel 5.5和Laravel Passport)。我试图实现基本登录(使用用户名和密码登录,验证后从服务器接收令牌,将该令牌用于将来的查询)。React JS Fetch返回空响应,但邮递员没有

我使用获取的代码如下:

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

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

回答

5

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

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

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

+0

D'oh!谢谢,就是这样。然而我很好奇:为什么调用该函数会改变服务器的响应?对我公认的新到React的思想来说,服务器的响应应该是相同的,不管是不是?唯一的区别是应用程序如何理解它?为什么在网络选项卡中查看响应是空的? – CGriffin

+0

@PeregrineStudios你没有改变服务器响应。请记住'fetch'现在是一个浏览器本地API。您可能正在考虑浏览器获取并返回的AJAX调用,但是如何将其格式化为您的业务。但通过Fetch,整个承诺链都是API调用的一部分。它正确地“调用”了调用(您的服务器日志应该显示该调用),但未在开发人员控制台中显示,因为浏览器解释了整个“fetch”调用,而不仅仅是线程请求。 –

相关问题