是否有快速4.x路由('/ path')的解决方法,并且支持params?

时间:2014-05-14 21:08:08

标签: express routing

我正在使用expressjs 4.x在mongodb上构建一个简单的api。

api需要提供几组数据:

/ API / V1 / datatype1 / API / V1 / datatype2

对于每种数据类型,我都有CRUD操作(post,get,put,delete)。

api请求看起来像这样:

POST /api/v1/datatype1
GET /api/v1/datatype1:_id 
PUT /api/v1/datatype1:_id 
DELETE /api/v1/datatype1:_id

如果我创建一个像这样的路由器:

dataType1ApiRouter.param("entity_id", function (req, res, next, id) {
   //async db fetch here by id, then call next with fetched data 
   //or error if faild request/not found entity.
   //let's say req.dataEntity = dataEtity; next();
} );

如果我创建这样的路线:

 dataType1ApiRouter.route("/datatype1")
      .get(":entity_id", function (req, res, next) {
           //expcet req.dataEntity to be fetched by the param filter.
      })
      .post(function(req, res, next) {
          //just create an new dataType1 entity.
      });

我收到语法错误。路径.get和.post(以及其他类似的方法)只需要一个参数,从而导致错误:

  Route.get() requires callback functions but got a [object String]

有没有办法在一个url声明下实际对所有“/ datatype1”请求进行分组,而不是为需要post方法的ID期望的每个方法重复方法(“datatype1:entity_id”)?

1 个答案:

答案 0 :(得分:0)

Router.route()没有一种干净的方法可以执行此操作,但您可以考虑使用其他Router代替Route。然后,您可以安装该子路由器。

基本示例,修改您提供的代码:

var mainRouter = express.Router(),
    subrouter = express.Router();

subrouter.param("entity_id", function (req, res, next, id) {
    // param handler attached to subrouter
});


subrouter.post('/', function(req, res, next) {
    // post handler attached to base mount-point
});

subrouter.get("/:entity_id", function (req, res, next) {
    // get handler attached to base mount-point/<id>
});

// here we mount the sub-router at /datatype1 on the other router
mainRouter.use('/datatype1', subrouter);

请注意,这需要在URL中添加一个'/',所以代替/ api / v1 / datatype1 [someidhere]它将是/ api / v1 / datatype1 / someidhere