- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在使用 Express、Firebase 和 ReactJS 创建一个小型应用程序。我偶然发现了 Firebase snapshot.val 的问题
express 上的这部分代码通过 ID 为我的旅行提供服务并获取所有内容。对于所有行程都工作正常,但是当我尝试进行单次行程时,它会返回此错误
如果我将其解构为数组:
UnhandledPromiseRejectionWarning: TypeError: snapshot.val is not a function or its return value is not iterable
如果我将它解构为一个对象:
TypeError: Cannot destructure property
trip
of 'undefined' or 'null'.
我完全困惑,找不到解决方案。
这是代码的明确部分:
const firebase = require('firebase');
const reference = () => firebase.database().ref('/trips')
exports.getSingle = async (id) => {
//const snapshot = await reference()
// .orderByChild('id')
// .equalTo(id)
// .limitToFirst(1)
// .once('value');
// const [trip] = snapshot.val();
// return trip
const snapshot = await reference()
.orderByChild('id')
.equalTo(parseInt(id, 10))
.limitToFirst(1)
.once('value');
let trip = [];
snapshot.forEach(function (tripSnapshot) {
tripStorage = tripSnapshot.val();
console.log(tripStorage);
trip.push(tripStorage);
});
console.log(trip);
return trip;
};
exports.getAll = async () => {
const snapshot = await reference().once('value');
return snapshot.val();
};
我正在前端获取行程:
componentDidMount() {
fetch("/api/trips/get/" + this.state.id)
.then(res => res.json())
.then(trip =>
this.setState({
trip
}, () => console.log("Trips fetched...", trip))
);
}
行程 Controller :
const express = require('express');
const route = express.Router();
const tripUtil = require('../utils/tripUtil');
route.get('/getAll', async (req, res) => {
const trips = await tripUtil.getAll();
res.json(trips);
});
route.get('/get/:id', async (req, res) => {
const { id } = req.params;
const trip = await tripUtil.getSingle(id);
if (trip) {
res.json(trip);
} else {
res.status = 400;
res.json({
error: 'trip not found'
});
}
});
module.exports = route;
并从对象映射属性,如下所示:
{this.state.trip.itinerary.days.map((day, i) => {
return (
<div key={i} className="trip-single-item__day">
<div className="trip-single-item__day-header">
<div className="trip-single-item__day-title">
{day.title}
</div>
<div className="trip-single-item__day-subtitle">
{day.subtitle}
</div>
<div className="trip-single-item__day-date">
{day.date}
</div>
</div>
<div className="trip-single-item__day-body">
<div className="trip-single-item__day-descritpion">
{day.description}
</div>
</div>
</div>
);
})}
这是单次旅行的图片Single trip in firebase
有什么建议或指示吗?谢谢
最佳答案
Firebase 通常建议不要将数据作为数组存储在实时数据库中(尽管存在一些异常(exception)):https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html
我猜测正在发生的是,由于某种原因,您的快照值没有呈现为数组,而是呈现为带有数字键的对象。原因之一可能是 Firebase 中的键不是严格顺序的,因为如果数据的键以 0 开头且没有间隙,Firebase 只会将数据呈现为数组。
你能试试这个代码看看它是否有效吗?
exports.getSingle = async (id) => {
const snapshot = await reference()
.orderByChild('id')
.equalTo(id)
.limitToFirst(1)
.once('value');
const queryResult = snapshot.val()
console.log(queryResult) // Make note of the object shape here. Make sure there are actually results.
const trip = Object.values(queryResult)[0]
return trip;
};
关于javascript - Firebase:snapshot.val不是函数或其返回值不可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55257495/
所以我有一个项目,我定期发布到 maven 没有问题。我现在想提供这个项目的 SNAPSHOT 版本。所以我做'mvn clean deploy'。一切正常,如下所示: [INFO] 从 sonaty
假设我有一个项目 A在依赖项目的开发中 B - 目前也在开发中,尚未发布。 所以,在 A的 POM 文件,我有以下部分: com.example project-b 1.0.0-SNAP
在我们的项目中,我们正在从 ant 脚本迁移到 gradle 构建。 我们将使用artifactory作为我们公司的 repo 管理器来存储artifacts。 我在神器中看到了一些存储库内容,其中包
我已经阅读了该网站上的许多帖子(尤其是:iOS 8 Snapshotting a view that has not been rendered results in an empty snapsho
我们将 SBT 与 sbt-git 结合使用,从 Git 修订版中获取构建版本。具体来说,我们使用 git describe 的输出作为版本号,并在当前修订未标记时附加“SNAPSHOT”限定符: v
我正在使用 bitlyj 快照 jar 从以下链接缩短 URL。 http://code.google.com/p/bitlyj/downloads/list 有人能给我解释一下snapshot.ja
我有点难以区分 SNAPSHOT 和 SNAPSHOT READ COMMITTED 之间的区别? READ COMMITTED 是一种悲观的并发方法,如何将其应用到乐观并发中?在这种情况下,在 SN
显然,如果 Artifact 在版本中没有 -SNAPSHOT,我的 Nexus 将拒绝我向他抛出的每一个部署。 数据: 失败 Artifact 的名称:entando-core-engine-exp
我有一个 UIBarButtonItem,它会打开一个像这样的弹出窗口: @IBAction func openAdmin(sender: UIBarButtonItem) { let ale
我能够以 快照 的形式获取我感兴趣的对象,如 CodePen 所示 以下是代码片段: $scope.post = {}; var postsRef = new Firebase('ht
我只在 iOS 7 中遇到此错误并且应用程序崩溃了。在 iOS 6 中,我从来没有收到任何错误,只有一次在打开相机时出现内存警告。 Snapshotting a view that has not b
我在我的快照版本(例如dependency-lib)上使用“mvn clean deploy”执行maven构建。构建成功, Artifact 成功部署在 Artifact 中。 然后,我在我的 de
我正忙于 iOS7 中的 UICollectionView。 我要在两种不同的布局之间更改我的 Collection View 的布局。它们是 UICollectionViewFlowLayout 的
我从 eclipse git 中查看了最新的源代码:git://git.eclipse.org/gitroot/platform/eclipse.platform.releng.aggregator.
我在 Amazon EC2 上有一个 postgresql 数据库,需要确定备份这些数据的最佳方式。我正在考虑两种选择: (1) 将 EBS 卷挂载到/pgsqldata 等目录,并将此目录用作 po
当我使用Jasper作为接口(interface)时,有时接口(interface)会调用jasper并生成报告,然后我们会得到如下异常: ==============================
我正在使用 Version Maven Plugin插件 use-latest-versions将 groupID=com.example* 内部依赖版本更新到最新版本的功能。这是使用 Jenkins
对于 SQL Server 2008 R2 中的 SNAPSHOt 隔离级别,MSDN ADO.Net 文档中提到了以下内容: Transactions that modify data do not
我在 Bitbucket 中创建了一个公共(public)存储库来为我保存所有版本和快照版本。 我正在使用 wagon-git 将 jar 上传到发布存储库。 这是我在 pom.xml 中的条目:
When starting the server, refuses to load my plugin with an error:启动服务器时,拒绝加载我的插件,并出现错误: Could n
我是一名优秀的程序员,十分优秀!