我有一个Apollo服务器:
45 const server = new ApolloServer({
46 resolvers,
47 typeDefs,
48 debug: true,
49 })
在客户端上,我收到类似js的错误:
扩展名:{code:“ INTERNAL_SERVER_ERROR”,…}
位置:[{line:3,column:7}]
0:{行:3,列:7}
消息:“无法读取未定义的属性'split'”
但是服务器正在运行的节点控制台未打印任何内容:
node:63865)DeprecationWarning:不建议使用当前URL字符串解析器,并且在以后的版本中将其删除。要使用新的解析器,请将选项{useNewUrlParser:true}传递给MongoClient.connect。 at服务器已准备就绪,位于http://localhost:4001/ Mongoose默认连接打开到mongodb:// localhost / gepick (节点:63865)DeprecationWarning:不建议使用collection.ensureIndex。请改用createIndexes。 (节点:63865)[DEP0005] DeprecationWarning:由于安全性和可用性问题,不建议使用Buffer()。请改用Buffer.alloc(),Buffer.allocUnsafe()或Buffer.from()方法
答案 0 :(得分:0)
在解析字段期间发生的错误是执行错误。如您所见,除非您自己捕获错误,否则它将被GraphQL捕获并作为errors
数组内响应的一部分返回。因为发现了错误,所以它永远不会显示在控制台中。
只要debug
选项设置为true并且您的NODE_ENV
为development
,返回的错误也将包括响应中的堆栈跟踪。您已将帖子中的错误截断,但应该在以下路径中找到堆栈跟踪:errors[0]extensions.exception.stacktrace
。
返回的错误还应包括一个path
属性,该属性应指向发生问题的解析器。
答案 1 :(得分:0)
根据官方文档:https://www.apollographql.com/docs/apollo-server/data/errors/#for-the-client-response
初始化ApoloServer
时,添加formatError: (err) => {...}
属性将打印出错误,请参见以下内容:
const server = new ApolloServer({
typeDefs,
resolvers,
formatError: (err) => {
console.error(err);
return err;
},
});