2016-03-01 15 views
5

Hãy nói rằng tôi đang cố gắng để tạo ra một chiếc xe đạp như một đột biếnlỗi Xử lý trong đột biến

var createBike = (wheelSize) => { 
    if (!factoryHasEnoughMetal(wheelSize)) { 
    return supplierError('Not enough metal'); 
    } 
    return factoryBuild(wheelSize); 
} 

gì xảy ra khi không có đủ thép cho họ bánh xe sáng bóng? Có thể chúng tôi sẽ cần lỗi cho phía máy khách. Làm thế nào để tôi nhận được điều đó cho họ từ máy chủ graphQL của tôi với đột biến dưới đây:

// Mutations 
mutation: new graphql.GraphQLObjectType({ 
    name: 'BikeMutation', 
    fields:() => ({ 
    createBike: { 
     type: bikeType, 
     args: { 
     wheelSize: { 
      description: 'Wheel size', 
      type: new graphql.GraphQLNonNull(graphql.Int) 
     }, 
     }, 
     resolve: (_, args) => createBike(args.wheelSize) 
    } 
    }) 
}) 

Đơn giản như trả lại một số loại lỗi mà máy chủ/tôi đã xác định?

Trả lời

6

Không chính xác chắc chắn nếu điều này là những gì bạn sau ...

Chỉ cần ném một lỗi mới, nó sẽ trả về một cái gì đó giống như

{ 
    "data": { 
    "createBike": null 
    }, 
    "errors": [ 
    { 
     "message": "Not enough metal", 
     "originalError": {} 
    } 
    ] 
} 

phía khách hàng của bạn nên chỉ xử lý các phản ứng

if (res.errors) {res.errors[0].message} 

Điều tôi làm là truyền một đối tượng với errorCode và tin nhắn, ở giai đoạn này, cách tốt nhất để làm là xâu chuỗi nó.

throw new Errors(JSON.stringify({ 
     code:409, 
     message:"Duplicate request......" 
})) 

Chú ý: bạn cũng có thể quan tâm tại thư viện này https://github.com/kadirahq/graphql-errors

bạn có thể che giấu tất cả các lỗi (chuyển thông điệp tới "Lỗi nội bộ"), hoặc xác định userError ('thông điệp tới khách hàng), trong đó những thứ này sẽ không được thay thế.

+0

Cảm ơn bạn đã trỏ đến thư viện lỗi graphql. –

+0

Haha, thật đơn giản! Cảm ơn bạn đã phản hồi rõ ràng và [lỗi graphql] (https://github.com/kadirahq/graphql-errors) –

+0

Chuẩn mực luôn trả về các thư được bản địa hóa trực tiếp từ API thay vì các khóa lỗi cho phép khách hàng xử lý bản dịch nó vui lòng? – dSebastien