javascript - 获取请求用户名 firebase [VUE]
问题描述
我正在尝试使用 Firebase 设置一个数据库,该数据库也有一个用户名字段。我正在使用 Google 的身份工具包 ( https://cloud.google.com/identity-platform/docs/reference/rest/v1/accounts/signInWithPassword ) 进行注册和登录操作。但据我所知,我无法在注册数据库中存储用户名,因为我无法更改表格和内容。这就是我创建自己的 Firebase 数据库的原因(见图,该数据库中的数据是通过 POST 请求存储的)。我想要做的是通过 GET 请求获取用户名。
我可以建立与我自己的 Firebase 数据库的连接并获得正常响应。我正在使用以下代码执行此操作:
const responseUser = await fetch(
`https://[firebase-link].firebasedatabase.app/users/${userId}.json`,
{
method: "GET",
}
);
这在我登录时收到响应,状态为 200(这似乎是正确的连接)。在console.log中我也可以清楚地看到我在请求中使用的对应的userId,它与数据库中的userId匹配。据我所知,我实际上在数据库中找到了正确的用户,但是没有地方可以找到用户名。第二个屏幕截图是我得到的响应。我已经尝试在响应中打开几乎所有选项,但没有地方可以找到数据库中的名称。
我知道我错过了一些可能非常简单的东西,但我似乎无法弄清楚。你们能帮帮我吗?
编辑:我正在尝试寻找另一种方法,我正在返回所有用户的列表(无论如何不会那么多),然后我使用 for 循环遍历每个条目。请参见下面的代码:
const responseUser = await fetch(
`https://[firebase-link].firebasedatabase.app/users.json`,
{
method: "GET",
}
);
// console.log(responseUser);
const responseUserData = await responseUser.json();
// console.log("ResponseUserData ===");
// console.log(responseUserData);
for (let userData in responseUserData) {
let userId = responseData.localId;
console.log("== userId");
console.log(userId); // returns the user ID I need to filter the userData on
console.log("== full user item");
console.log(userData); // returns the user item, which contains userId and userName
console.log("---------------------------------");
// How do I filter to get the userName of userItem with corresponding userId?
}
现在我需要做的就是过滤 userItem,就像我在代码的最后评论中所说的那样。怎么样?
我试图过滤以下方式:
const user = responseUserData.filter(user => user.userId === userId)
console.log(user);
但这给了我一个错误Uncaught (in promise) TypeError: responseUserData.filter is not a function
解决方案
查看Fetch API的文档:使用 fetch 的调用返回一个包含响应(一个Response
对象)的 Promise。然后,要从响应中提取 JSON 正文内容,文档表明您需要使用该json()
方法,该方法“返回一个使用 JavaScript 对象解析的 Promise,该对象是将正文文本解析为 JSON 的结果”。
该文档显示了以下示例,使用了两次then()
方法(即链接 Promises),因为返回了两个 Promise,如上所述。
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
在您的情况下,由于您使用async/await
,因此以下操作可以解决问题:
const response = await fetch(
`https://[firebase-link].firebasedatabase.app/users/${userId}.json`,
{
method: 'GET',
}
);
const responseData = await response.json();
console.log(responseData);
console.log(responseData.userName);
推荐阅读
- java - 有没有办法通过使用 FirestoreRecyclerAdapter 组合查询游标来对查询进行分页?
- jquery - 使用ajax调用在移动设备上滚动页面时防止touchstart
- python - 如何在不添加列和索引名称的情况下旋转数据框
- java - 即使资源不应该存在也得到响应
- php - 为什么我不能在 prestashop 1.7 的主题中嵌入我的模板?
- javascript - 电子邮件正则表达式返回空
- mysql - 在 GROUP BY 中选择 MAX,但在 MYSQL 中将结果限制为 1
- django - 找到默认的 ROUTING 键 - 在通道 2 中不再需要此键
- c# - 如何在 Windows 窗体中立即启动计时器?
- java - 带有 javafx 的 Maven 项目无法安装,因为它“找不到符号...”或“打包 javafx。... 不存在'