es6には標準でenumがないため、自前でenum風のクラスを作ってみたいと思います。
今回はhttpリクエストのメソッドを列挙型で表現します。
定義
class HTTP_METHOD {
static get get() {
return HTTP_TYPE_OBJECT.get;
}
static get post() {
return HTTP_TYPE_OBJECT.post;
}
static get put() {
return HTTP_TYPE_OBJECT.put;
}
static get delete() {
return HTTP_TYPE_OBJECT.delete;
}
get string() {
switch (this) {
case HTTP_TYPE.get:
return 'GET';
case HTTP_TYPE.post:
return 'POST';
case HTTP_TYPE.put:
return 'PUT';
case HTTP_TYPE.delete:
return 'DELETE';
default:
return null
}
}
}
const HTTP_METHOD_OBJECT = {
get: new HTTP_TYPE(),
post: new HTTP_TYPE(),
put: new HTTP_TYPE(),
delete: new HTTP_TYPE(),
};
使い方
HTTP_METHODは直接newしてインスタンスを作ってはいけません。
必ずstaticメソッドを使って該当のHTTP_METHODを取得してください。
function postSome() {
let postUrl = "https://hoge/post"
let param = {
hoge: "hoge"
}
request(postUrl, HTTP_METHOD.post, param)
}
function getSome() {
let postUrl = "https://hoge/get"
let param = {
hoge: "hoge"
}
request(postUrl, HTTP_METHOD.get, param)
}
function request(url, method, param) {
switch (method) {
case HTTP_METHOD.post:
case HTTP_METHOD.delete:
case HTTP_METHOD.put:
fetch(url, {
method: method.string,
body: JSON.stringify(param),
});
break;
case HTTP_METHOD.get:
searchParamsString = "";
Object.keys(params).forEach((key) => {
searchParamsString += key + "=" + params[key] + "&";
});
searchParamsString = searchParamsString.slice(0, searchParamsString.length - 1);
fetch(url + "?" + searchParamsString, {
method: method.string,
});
}
}