2016-10-20 2 views
0

Я прочитал книгу Перьев, так что я знаю, что для создания ошибочного ответа я просто экземпляром соответствующих feathers-errors класса:Как я могу сделать Перья (Экспресс на основе API Framework) возвращать ответы об ошибках

import {BadRequest} from 'feathers-errors'; 
const errorResponse = new BadRequest(`foo`, `bar`); 

Тем не менее, мне трудно вернуть ответ об ошибке пользователю. Даже когда я создаю конечную точку, которая не делает ничего, кроме возврата ошибочного ответа ...

class SomeService { 
    create(data) { 
     return new BadRequest(`foo`, `bar`); 
    } 
} 

он не работает: вместо того, чтобы ошибочный ответ, я не получаю никакого ответа, и внутри отладчика Chrome я вижу что ответ ожидает ответа (до тех пор, пока он не истечет и не станет ERR_EMPTY_RESPONSE).

Я пробовал прочитать о Экспресс-обработке ошибок, и в примерах, которые я видел, люди использовали next, чтобы обернуть ответ. Тем не менее, next происходит от обработчика ошибок, и я не уверен, где в моем коде Feathers я могу получить эту функцию next.

Если кто-то может помочь объяснить (с помощью next или нет), как я могу вернуть полный, не в ожидании, ошибочный ответ, я бы очень признателен.

ответ

2

Ваши услуги должны вернуть обещание. Если код не асинхронные вы можете превратить его в обещание с Promise.resolve и Promise.reject:

class SomeService { 
    create(data) { 
     return Promise.reject(new BadRequest(`foo`, `bar`)); 
    } 
} 

Также убедитесь, что вы зарегистрировали обработчик ошибок Экспресс, чтобы получить хорошо отформатированные ошибки:

const errorHandler = require('feathers-errors/handler'); 

// Last in the chain 
app.use(errorHandler); 

Существует также больше информации в error handling chapter.