2015-08-28 2 views
1

Я пытался обработать HTTP-ошибку в рефите. эти коды я пытался до сих пор:Как обрабатывать 403 HTTP-ошибку в обновлении?

function send403(req, res, err, cb) { 
    console.log('Forbidden'); 
    res.end(); 
} 

И тогда я использовать эту функцию в ForbiddenError события:

server.on('ForbiddenError', send403); 

Я ожидал, что функция будет выполняться каждый раз, когда сервер получает запрос без authorization заголовка

server.get('/resource', function (req, res, next) { 
    if(typeof req.headers['authorization'] === 'undefined') { 
    return next(new restify.ForbiddenError()); 
    } 
    else { 
    // HTTP 200 
    } 
}); 

Everytime я пытаюсь получить доступ к URL я получаю, что по умолчанию restify JSON сообщений.

FYI я пробовал один и тот же метод для 404 ошибки, и она работает

server.on('NotFound', send404); 

Everytime я пытаюсь отправить запрос на несуществующий URL, функция send404 будет выполнена.

+0

Если вы хотите получить значение из заголовка или тела, я предлагаю вам использовать var urVaribleHere = req.body.varible || ''; также какую часть, которую вы не понимаете, переосмыслить? потому что каждый раз пользователь отправляет URL-адрес, который не существует, не будет выполнен и будет отправлен 404 webPage Notfound. –

+0

@GujaratSantana Ужасно жаль, если вопрос вводит в заблуждение, я не английский. Поведение по умолчанию для исправления ошибки HTTP - это отправить ответ в формате JSON. В основном, я пытаюсь сделать это, чтобы заставить его делать что-то еще, например, сделать журнал для конкретной ошибки HTTP. Я пробовал событие 'server.on ('NotFound', fn)', и он работает, но 'server.on ('ForbiddenError', fn)' не работает. – sad301

+0

, поэтому вы пытаетесь отправить JSON с server.on ('ForbiddenError', fn) клиенту. Я не могу помочь вам с кодом, но, возможно, эта ссылка поможет вам лучше понять http://thejackalofjavascript.com/architecting-a-restful-node-js-app/ –

ответ

1

Я думаю, что это может быть то, что вы ищете. Я заметил, что в выражении «server.on» restify не требуется часть «Ошибка». Ниже приведен полный рабочий пример.

'use strict'; 
var restify = require('restify'); 
var server = restify.createServer(); 

server.on('Forbidden', send403); 

server.get('/resource', function(req, res, next){ 
    if(typeof req.headers['authorization'] === 'undefined') { 
     next(new restify.ForbiddenError()); 
    } 
    else { 
     // HTTP 200 
    } 
}); 

function send403(req, res, err, cb){ 
    console.log('Log something here'); 
    return cb(); 
} 

server.listen(9000); 
console.log('listening on port 9000');