Это будет работать в данный момент
class Controller {
static _post(auth, validate, handle) {
return req => {
if (auth(req) && validate(req)) handle(req);
};
}
}
Controller.easyPost = _post(EasyAuth, EasyValidate, EasyHandle);
Controller.hardPost = _post(HardAuth, HardValidate, HardHandle);
Есть предложение этапа 3, в котором ваш код, как написано, будет работать - https://github.com/tc39/proposal-static-class-features/
ну не совсем так, как написано -вам нужно указать Controller._post
следующим образом
class Controller {
static _post(auth, validate, handle) {
return (req) => {
if (auth(req) && validate(req))
handle(req);
}
}
static easyPost = Controller._post(EasyAuth, EasyValidate, EasyHandle);
static hardPost = Controller._post(HardAuth, HardValidate, HardHandle);
}
Примечание: вы можете включить это в babeljs, но это на втором этапе в babel
Что касается вашего обновленного кода - вы по-прежнемунужно вызвать Controller._post
, а не просто _post
class Controller {
static easyPost(req) {
return Controller._post(EasyAuth, EasyValidate, EasyHandle)(req);
}
static hardPost(req) {
return Controller._post(HardAuth, HardValidate, HardHandle)(req);
}
static _post(auth, validate, handle) {
return (req) => {
if (auth(req) && validate(req))
handle(req);
}
}
}
Чтобы продемонстрировать, что вы ДОЛЖНЫ использовать Controller._post, вот сокращенная версия вашего кода
class Controller {
static succeeds(req) {
return Controller._post()(req);
}
static fails(req) {
return _post()(req);
}
static _post() {
return (req) => {
return `got ${req}`;
}
}
}
console.log(Controller.succeeds('ok'))
console.log(Controller.fails('ok'))
и, наконец, версия кода, в которой вам не нужно использовать Controller._post
const post = (auth, validate, handle) => (req) => {
if (auth(req) && validate(req)) {
handle(req);
}
};
class Controller {
static easyPost(req) {
return post(EasyAuth, EasyValidate, EasyHandle)(req);
}
static hardPost(req) {
return post(HardAuth, HardValidate, HardHandle)(req);
}
}
module.exports = Controller;
сейчас post
тоже приватный
Хотя, если бы я писал это, я просто сделал бы
const post = (auth, validate, handle) => (req) => {
if (auth(req) && validate(req)) {
handle(req);
}
};
class Controller {
}
Controller.easyPost = post(EasyAuth, EasyValidate, EasyHandle);
Controller.hardPost = post(HardAuth, HardValidate, HardHandle);
module.exports = Controller;
или, если это действительно все, что есть в Controller
const post = (auth, validate, handle) => (req) => {
if (auth(req) && validate(req)) {
handle(req);
}
};
module.exports = {
easyPost: post(EasyAuth, EasyValidate, EasyHandle),
hardPost: post(HardAuth, HardValidate, HardHandle)
};