【发布时间】:2020-01-02 19:28:02
【问题描述】:
我正在尝试学习 GraphQL 教程 (https://www.apollographql.com/docs/tutorial/resolvers/),但是当我尝试预订行程时,我在操场上遇到错误,堆栈跟踪如下所示:
"TypeError: Cannot read property 'id' of null",
" at UserAPI.bookTrips (/Users/kurtpeek/Documents/Scratch/fullstack-tutorial/start/server/src/datasources/user.js:35:38)",
在src/index.js 中,ApolloServer (https://www.apollographql.com/docs/apollo-server/api/apollo-server/) 使用异步 context() 函数定义,如下所示:
const { ApolloServer } = require('apollo-server');
const typeDefs = require('./schema');
const { createStore } = require('./utils');
const resolvers = require('./resolvers');
const LaunchAPI = require('./datasources/launch');
const UserAPI = require('./datasources/user');
const isEmail = require('isemail');
const store = createStore();
const server = new ApolloServer({
context: async ({ req }) => {
debugger;
const auth = (req.headers && req.headers.authorization) || '';
const email = Buffer.from(auth, 'base64').toString('ascii');
if (!isEmail.validate(email)) return { user: null };
const users = await store.users.findOrCreate({ where: { email }});
const user = users && users[0] ? users[0] : null;
return { user: { ...user.dataValues }};
},
typeDefs,
resolvers,
dataSources: () => ({
launchAPI: new LaunchAPI(),
userAPI: new UserAPI({ store })
})
});
server.listen().then(({ url }) => {
console.log(`???? Server ready at ${url}`);
});
由于我看到的错误是上下文的user 是null 的结果,我想逐步通过context() 方法检查标题并查看它是否包含有效(编码)电子邮件;如您所见,我在该函数的开头设置了一个debugger 断点。
但是,当我运行node inspect src/index.js 时,我会立即进入调试器以获取IntrospectionQuery:
如果我按下“恢复脚本执行”按钮,我会立即返回到相同的断点。
这与context() 是async 函数这一事实有关吗?如何使用调试器单步执行context() 方法?
【问题讨论】:
标签: javascript node.js apollo apollo-server javascript-debugger