我正在使用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”)?
答案 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