使用Node.js调用Heroku的API(域名编辑)
使用Node.js调用Heroku的API。
只支持添加和删除域名的操作。
如果我感兴趣,可能会转移到 npm 上。
var CONFIG = {
heroku: {
key: "hogehoge",
name: "fugafugaapp"
}
};
var request = require("request");
var path = require("path");
/************************************************************/
// httpArg
// convert a dictionary to http arguments like:
// hoge=fuga&piyo=piyopiyo
// -- params := Dictionary
/************************************************************/
function httpArg(params) {
var ret = "";
var initial = true;
for (var key in params) {
if (initial) {
initial = false;
ret = key + "=" + params[key];
}
else {
ret += "&" + key + "=" + params[key];
}
}
return ret;
};
/************************************************************/
// herokuPOST
// call a heroku API using POST method.
// -- api := String, end point of the api.
// the url will be https://api.heroku.com/apps/:appname/:api
// -- params := Dictionary, parametetrs for the API
// -- cb := function(Error, body)
/************************************************************/
exports.herokuPOST = function(api, params, cb) {
var base64_user = new Buffer(":" + CONFIG.heroku.key).toString("base64");
request.post({
url: "https://api.heroku.com/apps/" + CONFIG.heroku.name + "/" + api,
headers: {
accept: "application/json",
authorization: "Basic " + base64_user
},
body: httpArg(params)
}, function(err, response, body) {
cb(err, body);
});
};
/************************************************************/
// herokuGET
// call a heroku API using GET method.
// -- api := String, end point of the api.
// the url will be https://api.heroku.com/apps/:appname/:api
// -- cb := function(Error, body)
/************************************************************/
exports.herokuGET = function(api, cb) {
var base64_user = new Buffer(":" + CONFIG.heroku.key).toString("base64");
request({
url: "https://api.heroku.com/apps/" + CONFIG.heroku.name + "/" + api,
headers: {
accept: "application/json",
authorization: "Basic " + base64_user
}
}, function(err, response, body) {
cb(err, body);
});
};
/************************************************************/
// herokuDEL
// call a heroku API using DELETE method.
// -- api := String, end point of the api.
// the url will be https://api.heroku.com/apps/:appname/:api
// -- cb := function(Error, body)
/************************************************************/
exports.herokuDEL = function(api, cb) {
var base64_user = new Buffer(":" + CONFIG.heroku.key).toString("base64");
request.del({
url: "https://api.heroku.com/apps/" + CONFIG.heroku.name + "/" + api,
headers: {
accept: "application/json",
authorization: "Basic " + base64_user
}
}, function(err, response, body) {
cb(err, body);
});
};
/************************************************************/
// registerDomain
// domain := String
// cb := function(Error)
/************************************************************/
exports.registerDomain = function(domain, cb) {
exports.herokuPOST("domains", {
"domain_name[domain]": domain
}, function(err, body) {
cb(err);
});
};
/************************************************************/
// removeDomain
// domain := String
// cb := function(Error)
/************************************************************/
exports.removeDomain = function(domain, cb) {
exports.herokuDEL("domains/" + domain, function(err, body) {
cb(err);
});
};
// sample code
// exports.registerDomain("hogehoge.smakul.com", function(err) {
// console.log(err);
// exports.removeDomain("hogehoge.smakul.com", function(err) {
// console.log(err);
// });
// });