我创建了数据库和一个集合。现在,我想从该集合中检索所有文档。
我使用了这种查询方法:
q.Map(
q.Paginate(Documents(Collection('posts'))),
q.Lambda(x => q.Get(x))
).then (x=>console.log(x))
但是每次我运行此代码时,它都会向我发送一条错误消息,告知未定义文档。 有人可以告诉我这是什么问题吗?
答案 0 :(得分:1)
您使用q。在地图,分页和Lambda前面。我认为这意味着您没有执行以下操作
const checkAccessToken = (req, res, next) => {
try {
const {subject: userId} = jwt.verify(req.body.token, 'secretkey');
if (!userId) throw new Error('Token data does not contain user id');
req.accessToken = {userId};
next();
}
catch (error) {
console.error(error);
res.status(401).send({message: 'Invalid access token'});
}
};
const authorizeUser = async (req, res, next) => {
try {
const user =
await User.findById(req.accessToken.userId)
.select('_id firstname lastname type')
.lean();
if (!user) {
return res.status(401).send({message: 'Unauthorized'});
}
req.user = user;
req.user.id = req.accessToken.userId;
next();
}
catch (error) {
console.error(error);
res.status(500).end();
}
};
logRoute.get(
'/user',
checkAccessToken, // checking token and putting user id to `req.user.id`
authorizeUser, // checking if user exists in database and putting it as `req.user` object
async (req, res) => { // handling some logic or simply returning `req.user` object
// some extra logic here...
res.status(200).send(req.user);
}
);
如果您这样做,这应该可以工作。 (免责声明:请确保不要覆盖特定于语言的功能,例如Map和or Function,对于这些功能,请使用q.Function和q.Map。
另一种方法是将q放在所有内容的前面。
import faunadb from 'faunadb'
const q = faunadb.query
const { Documents, Paginate, Collections, Lambda, Get } = q
如前所述,如果您确实公开了这些功能(个人觉得很方便),请不要使用Map,因为这是一个JavaScript关键字,因此最好的方法是:
q.Map(
q.Paginate(q.Documents(q.Collection('posts'))),
q.Lambda(x => q.Get(x))
).then (x=>console.log(x))