1

我正在使用node-restify并试图重载 GET 路由 - 这可能吗?不应该next()调用下一个匹配的路由注册吗?

这是一个例子。关于为什么它不起作用的任何提示?

server.get "search", (req, res, next) ->
    query = req.params.q
    console.log 'first handler'
    return next() if not query?

    # implement search functionality... return results as searchResults

    res.send 200, searchResults
    next()

server.get "search", (req, res, next) ->
    console.log 'second handler'
    res.send 200, "foo"
    next()

我希望/search输出“foo”,并且希望/search?q=bar输出与“bar”搜索词匹配的所有记录。

4

2 回答 2

0

我对 Restify 不是很熟悉,但它的工作方式肯定与 Express 不同。

我使用它来工作:

app.get('/search', function(req, res, next) {
  var q = req.params.q;
  if (! q) {
    return next('getsearchfallback');
  }
  res.send('bar');
});

app.get('search-fallback', function(req, res, next) {
  res.send('foo');
  next();
});

不过,我不确定是否应该这样做。

于 2013-11-05T18:27:08.913 回答
0

@robertklep 很接近 - 你应该name在路线上添加一个。

不支持明确的“路由链”语法,但可以像这样完成相同的功能:

server.get('/foo', function (req, res, next) {
  if (something()) {
    next('GetBar');
    return;
  }

  res.send(200);
  next();
});

server.get({
  path: '/bar',
  name: 'GetBar'
}, function (req, res, next) {
  res.send(200, {bar: 'baz'));
  next();
});

https://github.com/mcavage/node-restify/issues/193

于 2013-11-05T18:41:59.193 回答