2017-03-17 63 views
0

我是新來的羽毛,並建立一個API,羽毛生成的cli。如果客戶端執行無效GET請求:趕上無效的請求並返回錯誤與羽毛,sequelize

例如。 http://localhost:3030/stations/?asdfasdf

則返回500錯誤:

ER_BAD_FIELD_ERROR: Unknown column 'stations.asdfasdf' in 'where clause'

我寧願不報告這樣的錯誤返回給客戶端而會想返回「400錯誤的請求」來代替。我已經嘗試使用hook.error設置一個後鉤,但是這不會捕獲續集錯誤。

如何捕獲錯誤並向客戶端返回更安全,更通用的消息?

+0

我給了應該提供一個通用的方法來處理錯誤,但你能也https://github.com/feathersjs/feathers-sequelize/issues/new創建一個問題,因爲我認爲這可能是答案一般來說值得改變的東西。 – Daff

回答

1

error掛鉤是一個單獨的新掛鉤類型。隨着1.x的羽毛-CLI從一些改變你services index file

// Set up our before hooks 
messageService.before(hooks.before); 

// Set up our after hooks 
messageService.after(hooks.after); 

// Set up hooks 
messageService.hooks(hooks); 

然後在hooks/index.jsfile添加

exports.error = { 
    all: [], 
    find: [], 
    get: [], 
    create: [], 
    update: [], 
    patch: [], 
    remove: [] 
}; 

現在,您可以使用它來創建錯誤掛鉤。對於你的情況是這樣的:

const errors = require('feathers-errors');

exports.error = { 
    all: [ 
    function(hook) { 
     if(is(hook.error, 'ER_BAD_FIELD_ERROR')) { // Somehow check the Sequelize error type 
     hook.error = new errors.BadRequest('Invalid query field'); 
     } 
    } 
    ], 
    find: [], 
    get: [], 
    create: [], 
    update: [], 
    patch: [], 
    remove: [] 
}; 
+1

謝謝!我沒有意識到在當前版本中實現了錯誤掛鉤。作爲參考,我使用以下來獲取錯誤代碼:'hook.error.original.code,'ER_BAD_FIELD_ERROR'' – Finne