[英]javascript Subclass node.js express methods to add common functionality?
抱歉,这里对 Javascript 来说还是相当新的,所以希望这个问题不会太令人尴尬,但是:
我发现我在 node.js (express) 中按照以下几行编写了很多代码:
app.get("urlscheme1", function (res, resp) {
try {
auth_request(req); // throws on failure
validate_url_params(req); // throws on failure
common_tasks();
specific_taskABC();
} catch (e) {
if (e.error == "auth") {
resp.send(....);
} else if (e.error == "url_scheme") {
resp.send(....);
} else {
resp.send(translate_error(e), code_for_error(e)):
}
}
});
app.put("urlscheme1", function (res, resp) {
try {
auth_request(req); // throws on failure
validate_url_params(req); // throws on failure
common_tasks();
specific_taskDEF();
} catch (e) {
if (e.error == "auth") {
resp.send(....);
} else if (e.error == "url_scheme") {
resp.send(....);
} else {
resp.send(translate_error(e), code_for_error(e)):
}
}
});
app.post("urlscheme1", function (res, resp) {
try {
auth_request(req); // throws on failure
validate_url_params(req); // throws on failure
common_tasks();
specific_taskGHI();
} catch (e) {
if (e.error == "auth") {
resp.send(....);
} else if (e.error == "url_scheme") {
resp.send(....);
} else {
resp.send(translate_error(e), code_for_error(e)):
}
}
});
这似乎非常浪费。 但是,我对 JS 中的所有prototype
和“子类化”语法/语义并不是 100% 满意,还不足以理解如何让它变得更好。 有没有办法扩展现有的 class (在这种情况下是快速应用程序)让我做类似的事情:
app.get("urlscheme1", function(res, resp) {
do_something_ABC();
});
app.get("urlscheme1", function(res, resp) {
do_something_DEF();
});
app.get("urlscheme1", function(res, resp) {
do_something_GHI();
});
所有这些处理函数仍在执行那个“通用”代码?
谢谢!
像这样的东西会起作用:
function install(urlscheme, method, specific_task) {
function handler(res, resp) {
try {
auth_request(req); // throws on failure
validate_url_params(req); // throws on failure
common_tasks();
specific_task();
} catch (e) {
if (e.error == "auth") {
resp.send(....);
} else if (e.error == "url_scheme") {
resp.send(....);
} else {
resp.send(translate_error(e), code_for_error(e)):
}
}
}
app[method](urlscheme,handler); // app.post(), app.get(), etc.
};
install("urlscheme1","get", do_something_ABC );
install("urlscheme1","post", do_something_DEF );
install("urlscheme1","put", do_something_GHI );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.