Asked Jan 12th, 2018 9:35 AM 102 0 1
  • 102 0 1
+1

Apollo js (graphql) văng lỗi Unhandled error GraphQL error

Share
  • 102 0 1

Chào mọi người.

Mình cũng đang tìm hiểu apollo kết hợp với react js để query qua Graphql. Mình đang gặp vấn đề về việc ném error về client. Trong phần resolvers mình viết thế này

contacts: async (root, arg, context) => {
            if (!context.user) {
               throw new AuthorizeError();
            }
            return getAllContacts();
        },

Trường hợp hoàn hảo là người dùng đăng nhập thành công. context.user sẽ có giá trị. và mình lấy được danh sách contacts.

Sau đó mình check trường hợp context.user = null. thì mình ném ra một cái lỗi throw new AuthorizeError()

 const AuthorizeError = createError('AuthorizeError', {
    message: 'Bạn không có quyền truy cập hệ thống.hehe',
    data: {
        fasdfaf: 'fdasff'
    }
});

Sau khi mình reload lại thì Dưới client ( trong source react ) mình catch được cái lỗi đó. nhưng khong hiểu vì sao trong tab console của trình duyệt lại văng ra cái lỗi

  render() {
            const { data: { loading, error, contacts }, client } = this.props;
            if (loading) {
                return (<p>Loading.....</p>);
            }
            debugger;
            if (error) {
                if (error.graphQLErrors[0].name == "AuthorizeError") {
                     return  {error.graphQLErrors[0].message}
                     }
             }
        }
        

Trong tab console văng lỗi này Unhandled error GraphQL error: Bạn không có quyền truy cập hệ thống.hehe Error: GraphQL error: Bạn không có quyền truy cập hệ thống.hehe at new ApolloError Mình xin đính kèm cái hình

=> Mọi người có ai gặp lỗi này rồi. Mong mọi người giúp đỡ. Cám ơn mọi người rất nhiều.

Nguyễn Hữu Kim @huukimit
Jan 15th, 2018 3:32 AM

Viblo có hỗ trợ cú pháp markdown trong form của comment, answer, question, post giúp highlight code bằng cú pháp: ``` CODE HERE ```. Bạn có thể đặt câu hỏi và sử dụng cú pháp trên để câu hỏi được hiển thị đẹp và dễ đọc hơn nhé.

+1
| Reply
Share
Nguyễn Hữu Kim @huukimit
Jan 15th, 2018 4:31 AM

VD: Chào mọi người.

Mình cũng đang tìm hiểu apollo kết hợp với react js để query qua Graphql. Mình đang gặp vấn đề về việc ném error về client. Trong phần resolvers mình viết thế này

contacts: async (root, arg, context) => {
    if (!context.user) {
        throw new AuthorizeError();
    }

    return getAllContacts();
},

Trường hợp hoàn hảo là người dùng đăng nhập thành công. context.user sẽ có giá trị. và mình lấy được danh sách contacts.

Sau đó mình check trường hợp context.user = null. thì mình ném ra một cái lỗi throw new AuthorizeError():

const AuthorizeError = createError('AuthorizeError', {
    message: '**Bạn không có quyền truy cập hệ thống.hehe**',
    data: { fasdfaf: 'fdasff' }
});

Sau khi mình reload lại thì Dưới client ( trong source react ) mình catch được cái lỗi đó. nhưng khong hiểu vì sao trong tab console của trình duyệt lại văng ra cái lỗi:

render() {
    const { data: { loading, error, contacts }, client } = this.props;
    if (loading) {
        return (<p>Loading.....</p>);
    }

    debugger;
    if (error) {
        if (error.graphQLErrors[0].name == "AuthorizeError") {
            return { error.graphQLErrors[0].message }
        }
    }
} 

Trong tab console văng lỗi này Unhandled error GraphQL error: Bạn không có quyền truy cập hệ thống.hehe Error: GraphQL error: Bạn không có quyền truy cập hệ thống.hehe at new ApolloError Mình xin đính kèm cái hình

+1
| Reply
Share
Truong Chi Nhan @zhangchinhan
Jan 15th, 2018 6:37 AM

ok. thanks bạn nhé. hihi.

+1
| Reply
Share

1 ANSWERS


Answered Jan 15th, 2018 3:42 AM
+1

Bạn ném throw thì cần try-catch để bắt lỗi chứ bạn, if-else không bắt được đâu.

Share
Truong Chi Nhan @zhangchinhan
Jan 15th, 2018 6:43 AM

chào bạn, không hẳn là do chưa try catch đâu bạn. mình đang tìm hiểu về apollo js. phần trả response về cho client. mình đã tìm hiểu trên mạng. xem nhiều clip vs tutorial đều throw new Error . Mình đang phân vân là tại sao mình đã get được error trên server
const { data: { loading, error, contacts }, client } = this.props; trả về trong trong phần render() của react ròi. mà tại sao trong tab console của trình duyệt lại văng ra cái lỗi

Unhandled error GraphQL error: Bạn không có quyền truy cập hệ thống.hehe Error: GraphQL error: Bạn không có quyền truy cập hệ thống.hehe
    at new ApolloError (http://localhost:3000/static/js/bundle.js:20785:28)
    at http://localhost:3000/static/js/bundle.js:19847:41
    at http://localhost:3000/static/js/bundle.js:20234:17
    at Array.forEach (<anonymous>)
    at http://localhost:3000/static/js/bundle.js:20233:18
    at Map.forEach (<anonymous>)
    at QueryManager../node_modules/apollo-client/core/QueryManager.js.QueryManager.broadcastQueries (http://localhost:3000/static/js/bundle.js:20228:22)
    at Object.next (http://localhost:3000/static/js/bundle.js:20267:31)
    at SubscriptionObserver.next (http://localhost:3000/static/js/bundle.js:145182:14)
    at http://localhost:3000/static/js/bundle.js:21121:76
    at Array.forEach (<anonymous>)
    at Object.next (http://localhost:3000/static/js/bundle.js:21121:43)
    at SubscriptionObserver.next (http://localhost:3000/static/js/bundle.js:145182:14)
    at SubscriptionObserver.next (http://localhost:3000/static/js/bundle.js:145182:14)
    at http://localhost:3000/static/js/bundle.js:21319:26
    at <anonymous>
__stack_frame_overlay_proxy_console__ @ index.js:2177

Uncaught (in promise) Error: GraphQL error: Bạn không có quyền truy cập hệ thống.hehe
    at new ApolloError (ApolloError.js:34)
    at Object.next (QueryManager.js:700)
    at SubscriptionObserver.next (zen-observable.js:154)
    at dedupLink.js:49
    at Array.forEach (<anonymous>)
    at Object.next (dedupLink.js:49)
    at SubscriptionObserver.next (zen-observable.js:154)
    at SubscriptionObserver.next (zen-observable.js:154)
    at httpLink.js:140
    at <anonymous>````
0
| Reply
Share