如何将Firebase数据库返回的[object Object]转换为字符串?
解决Firebase DataSnapshot转字符串的问题
嘿,刚接触Firebase和JS遇到这种问题太正常啦!我来给你捋清楚咋回事~
你现在拿到的username其实是Firebase的DataSnapshot对象,不是直接的字符串值。当你把这个对象塞进模板字符串里时,JS会默认调用它的toString()方法,结果就是[object Object],这就是为啥URL里会出现这个奇怪的内容。
要拿到实际的字符串值,你需要用DataSnapshot对象的val()方法——它专门用来提取快照里存储的真实数据。
修改后的代码示例
最简单的修改方式就是在then回调里返回snapshot.val(),而不是snapshot本身:
// 直接获取值的写法 const username = await firebase.database() .ref(`users/${authUser}/name`) .once("value") .then(snapshot => snapshot.val());
或者拆分步骤,可读性更好:
// 先获取快照对象 const nameSnapshot = await firebase.database() .ref(`users/${authUser}/name`) .once("value"); // 再用val()提取字符串值 const username = nameSnapshot.val();
这样username就会是你期望的"testname"字符串,再拼进URL里就正常了:
const url = `https://url.com/users/${username}/${authUser}/posts.json?auth=${token}`; console.log(url); // 输出:https://url.com/users/testname/xxx/posts.json?auth=xxx
额外小提示
如果担心用户可能没有设置name字段(也就是快照返回null),可以加个兜底值避免出错:
const username = nameSnapshot.val() || "unknown-user";
内容的提问来源于stack exchange,提问作者Brydawg
相关产品推荐
相关产品推荐

