restify Routing

常见的处理程序: server.use()
原文:http://mcavage.me/node-restify/#server-api

一个的RESTify服务器有一个use() 方法,它的形式function(req, res, next) 的处理程序。需要注意的是的RESTify按顺序运行处理程序,他们被注册到服务器上,所以如果你想要一些常见的处理程序运行,在您的任何路线之前,问题需要调用 use() 在定义路由之前。

注意,在所有调用 use() 和路由下面,你可以传递任何直接组合的函数(function(req, res, next))和函数的数组 ([function(req, res, next)])。

路由

RESTify路由,在“basic”模式,是几乎等同于 express/sinatra,在HTTP动词被用于参数化资源,以确定哪些处理程序链运行。与命名占位符关联的值在req.params中是可用的。请注意,值将被URL解码在传递给你之前。

function send(req, res, next) {
   res.send('hello ' + req.params.name);
   return next();
 }

 server.post('/hello', function create(req, res, next) {
   res.send(201, Math.random().toString(36).substr(3, 8));
   return next();
 });
 server.put('/hello', send);
 server.get('/hello/:name', send);
 server.head('/hello/:name', send);
 server.del('hello/:name', function rm(req, res, next) {
   res.send(204);
   return next();
 });

您也可以通过用RegExp对象,并用req.params访问捕捉组(这将不以任何方式解释执行):

server.get(/^\/([a-zA-Z0-9_\.~-]+)\/(.*)/, function(req, res, next) {
  console.log(req.params[0]);
  console.log(req.params[1]);
  res.send(200);
  return next();
});

在这里,任何请求就像:

$ curl localhost:8080/foo/my/cats/name/is/gandalf

将会导致req.params[0]是foo和req.params[1]是my/cats/name/is/gandalf。基本上,你可以做任何你想要的。

注意,next() 的使用。你是负责调用next() ,为了运行下一个处理程序,在链中。如下,您可以传递一个错误的对象到有的RESTify中,自动返回响应给客户端。

您可以传入 false 而不是error,但是要停止处理程序链。如果你曾有res.send在早期的过滤器中,这不是一个错误,你可能有一个以后你想要短路,这非常有用。

最后,你可以传入一个字符串 name 传递给next(),和的RESTify会查找这个路由,并假设它存在,将在你离开链的地方运行。因此,例如:

var count = 0;

server.use(function foo(req, res, next) {
    count++;
    next();
});

server.get('/foo/:id', function (req, res, next) {
   next('foo2');
});

server.get({
    name: 'foo2',
    path: '/foo/:id'
}, function (req, res, next) {
   assert.equal(count, 1);
   res.send(200);
   next();
});

需要注意的是 foo 只得到运行一次在例子中。几个注意事项:

  • 如果您提供的名称不存在,RESTify会用500响应请求。
  • 别傻了,并调用这在循环中。RESTify不会检查这个。
  • 最后,你不能“chain”next(’route’)调用; 你只能委托路由链一次(这是路由内部存储方式的限制,并且可能某一天重新访问)。

链处理程序
路由还可以接受多个处理函数。 例如:

server.get(
    '/foo/:id',
    function(req, res, next) {
        console.log('Authenticate');
        return next();
    },
    function(req, res, next) {
        res.send(200);
        return next();
    }
);

超媒体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值