我正在关注这个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()函数,但是 得到:未定义。
任何人都可以帮助我吗?
答案 0 :(得分:3)
所以我能够通过创建与用户的链接,从Mongo数据库中删除用户,然后查询链接的postedBy
属性来重现错误。
我建议删除所有链接并重新创建用户(注册+登录),创建新链接,然后查询postedBy
字段。