2015-07-07 3 views
1

Я пишу REST API в node.js. Я ожидаю, что максимум 5 параметров поступят в мой запрос GET. Если есть неопознанные параметры, я хочу отправить 400 Bad Request. В настоящее время я его обработки следующим образом:Эффективный способ обработки ошибок в REST Apis

server.route({ 
     method: "GET", 
     path : "/test", 
     handler : function (request, reply) { 

      if (request.query.a || request.query.b || request.query.c || request.query.d || request.query.e) 
      { 

      // do some processing 
      } 
      else { 
      reply("No valid parameters").code(400); 
      } 
     } 
}); 

Сейчас это не обрабатывает случай, если есть некоторые справедливы и некоторые недопустимые случаи. Я могу решить это, используя больше условий if. Но мне было просто интересно, существует ли стандартный или более эффективный метод, который используется разработчиками.

ответ

1

Hapi имеет встроенную поддержку проверки. Вы можете использовать Joi для подтверждения запроса:

var Joi = require('joi'); 

... 

server.route({ 
    method: 'GET', 
    path: '/test', 
    config: { 
     validate: { 
      query: { 
       a: Joi.string(), 
       b: Joi.string(), 
       c: Joi.string(), 
       d: Joi.string(), 
       e: Joi.string() 
      } 
     } 
    }, 
    handler: function (request, reply) { 

     return reply('ok'); 
    } 
}); 

Если вы отправите запрос на /test?g=foo, то вы получите следующий ответ:

{ statusCode: 400, 
    error: 'Bad Request', 
    message: '"g" is not allowed', 
    validation: { source: 'query', keys: [ 'g' ] } } 
+0

Спасибо. Это выглядит здорово. Я не могу проверить это прямо сейчас, но это позволяет делать такие случаи, как переданные только параметры a & b. Если параметры не будут переданы, он вернет 400? Мне жаль, что я не в состоянии проверить его сам на данный момент :( – user1692342

+1

Да, с Joi можно сделать какие-либо проверки. Приведенный выше код не вернет 400, если параметры не переданы, но это можно настроить Joi на возврат 400. Ваш вопрос немного широк. Предлагаю посмотреть документацию Joi и попытаться создать схему проверки. Если у вас возникла проблема, откройте другой вопрос и список, какие случаи действительны, а какие - нет. –

0

Вы можете это сделать вручную, но вам лучше использовать REST-инфраструктуру, такую ​​как mongoose или loopback (strongloop), чтобы выполнить проверку и обработки ошибок и другого кода шаблона, например, привязки модели.

0

Возможно, вам следует рассмотреть возможность использования рамы, например Express, для использования middleware, который представляет собой просто код, который можно повторно использовать в разных направлениях.

Простой псевдо/пример выглядит следующим образом

var app = express(); 

// a middleware with no mount path; gets executed for every request to the app 
app.use(function (req, res, next) { 
    if (req.query.a && req.query.b) { 
    return next() 
    } 
    else { 
    return res.status(400).send('Not OK'); 
    } 
}); 

// a route and its handler function (middleware system) which handles GET requests to /user/:id 
app.get('/user/:id', function (req, res, next) { 
    return res.send('OK'); 
}); 

// a different route, same middleware 
app.get('/customer/:id', function (req, res, next) { 
    return res.send('OK'); 
}); 
Смежные вопросы