对于我用于路由构建的每个HTTP请求方法,有四种方法相对应。
每种方法的计划是:
RouteBuilder.prototype.>>METHOD<< = function (params, callback) {
if(typeof params === "function") {
callback = params;
router.>>METHOD<<(this._path, callback);
return;
}
var subRoute = params.subRoute || "";
var url = this._path + subRoute;
if(params.auth !== undefined) {
router.>>METHOD<<(url, Auth.authenticate(params.auth, { session: false }), callback);
} else {
router.>>METHOD<<(url, callback);
}
};正如您可能怀疑的那样,这些方法的名称是: get、post、put和delete。目前,我有四个几乎相同的方法定义,我正在寻找更优雅的方法。
我考虑创建一个带有方法名称的数组,并使用键参数将方法映射到它,但是在循环中创建函数似乎不是一个好主意。此外,我需要这些方法与JSDoc兼容。
发布于 2015-03-20 14:40:09
好吧,既然你已经完成了99%的工作,我会给你一个答复。您在问题中发布的代码非常接近您正在寻找的通用解决方案:
RouteBuilder.prototype.route = function (method, params, callback) {
if(typeof params === "function") {
callback = params;
router[method](this._path, callback);
return;
}
var subRoute = params.subRoute || "";
var url = this._path + subRoute;
if(params.auth !== undefined) {
router[method](url, Auth.authenticate(params.auth, { session: false }), callback);
} else {
router[method](url, callback);
}
};
RouteBuilder.prototype.get = function(params, callback) {
this.route("get", params, callback);
};
RouteBuilder.prototype.put = function(params, callback) {
this.route("put", params, callback);
};
RouteBuilder.prototype.post = function(params, callback) {
this.route("post", params, callback);
};
RouteBuilder.prototype.del = function(params, callback) {
this.route("del", params, callback);
};发布于 2015-03-20 17:26:49
我考虑创建一个带有方法名称的数组,并使用键参数将方法映射到它,但是在循环中创建函数似乎不是一个好主意。
这种方法没有什么问题,它非常简单有效:
['get', 'post', 'put', 'delete'].forEach(function(METHOD) {
RouteBuilder.prototype[METHOD] = function (params, callback) {
if(typeof params === "function") {
callback = params;
router[METHOD](this._path, callback);
return;
}
var subRoute = params.subRoute || "";
var url = this._path + subRoute;
if(params.auth !== undefined) {
router[METHOD](url, Auth.authenticate(params.auth, { session: false }), callback);
} else {
router[METHOD](url, callback);
}
};
});https://stackoverflow.com/questions/29169055
复制相似问题