2015-05-29 18 views
9

Làm thế nào để bạn trả về lỗi trong một móc hoạt động?Strongloop: làm thế nào để bạn trả về lỗi nếu Operation Hook thất bại?

Trường hợp sử dụng gửi thông báo đẩy sau khi lưu một phiên bản mẫu mới.

Tôi quan sát sự kiện 'after save', gửi đẩy. Nếu điều này không thành công vì bất kỳ lý do gì, tôi muốn gửi mã số 500 response. Làm thế nào để làm điều đó?

Tôi không thể tìm thấy tài liệu về những gì đối tượng thực sự là hoặc chứa.

Customer.observe('after save', function(ctx, next) { 

    //model saved, but sending push failed for whatever reason, and I want to now send a 500 error back to the user 
    //how? what's inside ctx? how do you send back a response? 
    next(); 
}); 

Cảm ơn bạn

+1

Bạn có thể kiểm tra đối tượng ctx bằng 'console.log (ctx)'. Đó là đối tượng bối cảnh đại diện cho yêu cầu và dữ liệu liên quan (ví dụ 'ctx.instance' là ví dụ Khách hàng của bạn). Để vượt qua các lỗi thông qua các móc hoạt động, truyền lỗi thông qua 'next (error);' là dòng cuối cùng trong hook của bạn. Nhưng đó là nơi mà sự hiểu biết của tôi kết thúc - tôi không chắc nó kết thúc ở đâu hay làm thế nào để xử lý nó ở một nơi trung tâm. – Brian

+0

Bạn có thể sử dụng mô-đun khẳng định để phát hiện lỗi một cách rõ ràng. –

Trả lời

9

Tôi tin rằng đó là một cái gì đó dọc theo những dòng:

var error = new Error(); 
error.status = 500; 
next(error); 
8

Mở rộng câu trả lời trước, như tôi không thể thêm ý kiến ​​được nêu ra.

Bạn có thể cung cấp thêm thông tin để đáp ứng với lỗi:

var error = new Error(); 
error.status = 401; 
error.message = 'Authorization Required'; 
error.code = 'AUTHORIZATION_REQUIRED'; 

này sẽ trở lại một cái gì đó như:

{ 
    "error": { 
     "name": "Error", 
     "status": 401, 
     "message": "Authorization Required", 
     "code": "AUTHORIZATION_REQUIRED", 
     "stack": "Error: Authorization Required\n at ..." 
    } 
} 
0

Có tài liệu chi tiết về những gì ctx thực sự chứa. Nó có thể được tìm thấy trong Loopback after-save operation hook docs.

Đối tượng ctx có phương thức instance trả về phiên bản mẫu đã được lưu. Bạn có thể trả lại lỗi sau khi kiểm tra cá thể mẫu như sau:

if (ctx.instance) { 
    // check if your push operation modified the instance 
    // If condition is not met, throw the error 
    var error = new Error() 
    error.status = 500 
    error.message = '...' 
    next(error) 
} 

Tài liệu trên bao gồm các thuộc tính của đối tượng ctx cho móc after save.

Các vấn đề liên quan