2015-08-28 21 views
1

我一直在尝试处理restify中的HTTP错误。这些都是我一直在试图至今代码:如何在restify中处理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 
    } 
}); 

每次我尝试访问我不断收到的是默认的RESTify JSON消息的URL。

FYI我已经试过了404错误相同的方法和它的工作原理

server.on('NotFound', send404); 

每次我试图发送一个不存在的网址的请求时,send404功能将被执行。

+0

,如果你想从头部或身体得到的值,我建议你使用VAR urVaribleHere = req.body.varible || '';还有哪些你不了解的部分?因为每次用户发送一个不存在的URL都不会被执行,并且将被发送404 webPage Notfound。 –

+0

@GujaratSantana非常抱歉,如果问题是误导性的,我不是英语发言者。 restify for 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');