Apollo服务器未在节点控制台上显示错误

时间:2019-06-30 06:30:34

标签: node.js graphql apollo apollo-server

我有一个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()方法

2 个答案:

答案 0 :(得分:0)

在解析字段期间发生的错误是执行错误。如您所见,除非您自己捕获错误,否则它将被GraphQL捕获并作为errors数组内响应的一部分返回。因为发现了错误,所以它永远不会显示在控制台中。

只要debug选项设置为true并且您的NODE_ENVdevelopment,返回的错误也将包括响应中的堆栈跟踪。您已将帖子中的错误截断,但应该在以下路径中找到堆栈跟踪: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;
  },
});