必须使用值调用loader.load()函数,但得到:undefined

时间:2017-07-25 00:09:31

标签: node.js graphql

我正在关注这个graphql教程,在我尝试使用数据加载器之前一切正常。

我的server.js是:

{ [Error: Missing scope type.]
code: 400,
errors: 
 [ { domain: 'global',
     reason: 'required',
     message: 'Missing scope type.' } ] }

我的复制并粘贴dataloaders.js:

const start = async () => {
  const mongo = await connectMongo();

  const buildOptions = async req => {
    const user = await authenticate(req, mongo.Users);
    return {
      context: {
        dataloaders: buildDataloaders(mongo),
        mongo,
        user
      },
      schema
    };
  };
  app.use('/graphql', bodyParser.json(), graphqlExpress(buildOptions));
  app.use(
    '/graphiql',
    graphiqlExpress({
      endpointURL: '/graphql',
      passHeader: `'Authorization': 'bearer token-alessander70@gmail.com'`
    })
  );
  app.use('/', expressStaticGzip('dist'));
  app.use('/attendance', expressStaticGzip('dist'));
  app.use('/login', expressStaticGzip('dist'));

  spdy.createServer(sslOptions, app).listen(process.env.PORT || 8080, error => {
    if (error) {
      console.error(error);
      return process.exit(1);
    } else {
      console.info(
        `App available at https://localhost:${process.env.PORT || 3000}`
      );
    }
  });
};

我的resolvers.js:

const DataLoader = require('dataloader');

async function batchUsers(Users, keys) {
  return await Users.find({ _id: { $in: keys } }).toArray();
}

module.exports = ({ Users }) => ({
  userLoader: new DataLoader(keys => batchUsers(Users, keys), {
    cacheKeyFn: key => key.toString()
  })
});

当我尝试获取allLinks时,我收到错误:

  

TypeError:必须使用值调用loader.load()函数,但是   得到:未定义。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

所以我能够通过创建与用户的链接,从Mongo数据库中删除用户,然后查询链接的postedBy属性来重现错误。

我建议删除所有链接并重新创建用户(注册+登录),创建新链接,然后查询postedBy字段。