尝试使用javaScript在FaunaDB中的一个集合中获取所有文档时遇到的问题

时间:2020-07-01 20:05:52

标签: javascript faunadb

我创建了数据库和一个集合。现在,我想从该集合中检索所有文档。

我使用了这种查询方法:

q.Map(
  q.Paginate(Documents(Collection('posts'))),
  q.Lambda(x => q.Get(x))
).then (x=>console.log(x))

但是每次我运行此代码时,它都会向我发送一条错误消息,告知未定义文档。 有人可以告诉我这是什么问题吗?

1 个答案:

答案 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))