Чем заменить экспресс res.send({user: 'xyz' }); или res.end() в коа?

Я хочу отправить response с error в моем приложении koa, когда нет sessionId. Я изучил, но не получил ничего полезного, чтобы сделать то же самое. Я также использовал return ctx.throw(401); для unauthorized, но это не хорошо, ctx.throw(401); просто отправляет «неавторизованный», я хочу добавить некоторую конкретную информацию и после добавления просто отправить ответ клиенту. может ли кто-нибудь предложить мне, что делать то же самое?

Мой код:

index.validateKey = async (ctx, next) => {
    await new Promise((resolve, reject) => {
        var authorized = ctx.headers.sessionid ? true : false;
        if (!authorized) {
             return ctx.throw(401); //HERE , I want to send .
        }
        resolve();
    });
    await next();
}

person Shubham Verma    schedule 29.03.2017    source источник
comment
Почему вы используете асинхронное ожидание, когда нет асинхронного вызова?   -  person Nishant Srivastava    schedule 03.04.2017


Ответы (1)


Вы можете проверить sessionId синхронно, поэтому функция асинхронного ожидания не требуется. Ваша промежуточная функция может быть такой.

async(ctx, next) => {
    var authorized = ctx.headers.sessionid ? true : false;
    if (!authorized) {
        return ctx.throw('session Id required', 401);; 
        /*HERE , You can send custom message and return.*/
    }
    /* call next middleware else*/
    await next();
})
person Chetan acharekar    schedule 03.04.2017
comment
Спасибо, Четан, но могу ли я отправить объект в ctx.thwor()? - person Shubham Verma; 04.04.2017
comment
koa js использует https://github.com/jshttp/http-errors для генерации ошибок, в которых четко указано сообщение - традиционное сообщение об ошибке, которое должно быть коротким и состоять из одной строки, поэтому здесь у вас есть два варианта: вы можете преобразовать объект в строку и отправить то же самое, что и в приведенном выше методе. или ctx.throw(401,'errorstring', { error: 'object' });, затем перехватите объект ошибки в одной попытке перехвата koa и примите соответствующие меры. - person Chetan acharekar; 04.04.2017