【问题标题】:How to handle 403 HTTP error in restify?如何处理restify中的403 HTTP错误?
【发布时间】:2015-08-28 13:02:41
【问题描述】:

我一直在尝试处理 restify 中的 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
  }
});

每次我尝试访问该 url 时,我都会收到默认的 restify JSON 消息。

仅供参考,我已经尝试了相同的方法来解决 404 错误,并且它有效

server.on('NotFound', send404);

每次我尝试向不存在的 url 发送请求时,send404 函数都会被执行。

【问题讨论】:

  • 如果你想从 header 或 body 中获取值,我建议你使用 var urVaribleHere = req.body.varible || '';还有什么部分你不明白restify?因为每次用户发送一个不存在的 url 都不会被执行,并且会发送 404 webPage Notfound.
  • @GujaratSantana 非常抱歉,如果这个问题具有误导性,我不会说英语。 restify for HTTP 错误的默认行为是以 JSON 格式发送响应。基本上我在这里要做的是让它做其他事情,比如为特定的 HTTP 错误创建日志。我尝试了server.on('NotFound', fn) 事件并且它有效,但server.on('ForbiddenError', fn) 不起作用。
  • 因此您尝试将带有 server.on('ForbiddenError', fn) 的 JSON 发送到客户端。我不能帮你写代码,但也许这个链接会帮助你更好地理解thejackalofjavascript.com/architecting-a-restful-node-js-app

标签: node.js http-status-code-403 restify


【解决方案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');

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 2015-11-17
    • 2016-02-14
    • 2013-08-19
    • 2012-08-06
    • 2023-04-09
    • 2019-01-13
    • 2017-10-02
    相关资源
    最近更新 更多