很高兴为您提供帮助 我正在尝试在nodejs服务器上使用firebase。 初始配置后,我在用于从Firebase数据库中获取数据的节点服务器上建立了一个休息区
这是代码的第一个版本
app.get('/api/users/:id', (req,res) =>{
const usersRef = firebase.database().ref('users');
usersRef.once('value')
.then((snapshot) => {
console.log(snapshot);
res.status(200).send(snapshot.val())
})
.catch((error) => {
console.log(error);
res.status(404).send(error.message)
})
}))
我与邮递员检查了该路线,发现我没有收到该路线的任何回复 我已经用日志检查了路由是否收到了请求,并且发现必须创建对数据库的异步调用,因此,我创建了中间件 这是新版本的代码:
const asyncMiddleware = fn =>
(req, res, next) => {
Promise.resolve(fn(req, res, next))
.catch(next);
};
app.get('/api/users/:id', asyncMiddleware(async (req,res,nex) =>{
const usersRef = firebase.database().ref('users');
await usersRef.once('value')
.then((snapshot) => {
console.log(snapshot);
res.status(200).send(snapshot.val())
})
.catch((error) => {
console.log(error);
res.status(404).send(error.message)
})
}))
但是即使更改后问题仍然存在。 因此,我发现问题的原因是因为当他尝试从firebase中获取数据而不返回任何响应时,“一次”函数堆栈。
我真的很想在这里为您提供帮助 谢谢
答案 0 :(得分:0)
我想这与您处理异步请求的方式有关。尝试下面的代码,让我们看看能不能带来成功。
const fetchUsers = () => new Promise((resolve, reject) => {
try{
const usersRef = firebase.database().ref('users')
usersRef.once('value', (snapShot) => {
resolve(snapShot)
})
}catch(err){
reject(err)
}
})
app.get('/api/users/:id', async (req,res) =>{
const users = await fetchUsers()
/**
* clean the users response
* and respond with data
*/
res
.status(200)
.json({
data: users //cleaned
})
}))
答案 1 :(得分:0)
因此,在调查之后,我找到了解决此问题的方法。 我已经通过使用Firebase的REST API在服务器发送请求上使用了axios