我用MongoDB和Node.js创建了一个煩悩API
这个时候是年末忙碌的时候了。距离敲除夜钟的日子也越来越近了。
除夕之夜的钟声一般会敲响108次,关于钟声次数的来历有很多说法,但最常传说的是为了摆脱108种烦恼而设定。
在这个年底之际,我兼顾学习Node.js和MongoDB,尝试创建了一个名为“煩悩API”的项目。
在制作过程中我意识到的是,烦恼是固定在108个,不会再增加,所以实际上并不需要使用MongoDB。
我非常想尝试使用MongoDB,所以我继续使用了它。
我主要依照「使用Node.js、Express和MongoDB创建REST API」的教程,使用Node.js的Express框架和MongoDB数据库创建了一个API。
MongoDB和Node.js的集成部分,请参阅上述的解释。(おい
关于烦恼的种类有各种说法,但本API是根据这篇文章中给出的定义来创建的。
我之前认为纷扰有108种不同的名字,但是听说它们其实是根据不同的阶段循环重复的。
这是一点儿有用的知识。
希望查看源代码的人。
关于烦恼API的源代码,
已经在hilotter / bonnou上公开。
希望亲自调整纷念API的人
由于以前已经总结了使用chef-solo创建Mongo+Node.js环境的方法,所以您可以根据上述源码和这里的指导,使用vagrant启动一个虚拟机,然后就能够创建原始的煩悩API了。
git clone git@github.com:hilotter/bonnou.git
cd bonnou
npm install
node server.js
说明
即使说煩悩API的全部都在 bonnou.js 中也不为过。
在bonnou.js中,进行了从MongoDB调用数据和初始化处理的操作。
如果名为bonnou的数据库不存在,则在初始化过程中调用populateDB();来创建所有的煩悩。
在populateDB的过程中,我们只是不停地注册纷繁的主数据。
var populateDB = function() {
Array.prototype.in_array = function(val) {
for(var i = 0, l = this.length; i < l; i++) {
if(this[i] == val) {
return true;
}
}
return false;
};
var rokudai = {
"貪": {
name: "貪",
kana: "とん",
description: "万の物を必要以上に求める心"
},
"瞋": {
name: "瞋",
kana: "しん",
description: "自分に背くことがあれば必ず怒るような心"
},
"癡": {
name: "癡",
kana: "ち",
description: "万物の理にくらき心"
},
"慢": {
name: "慢",
kana: "まん",
description: "他人と比較して思い上がり、自分を頼んで人を侮るような心"
},
"疑": {
name: "疑",
kana: "ぎ",
description: "仏教の示す真理に、まず疑ってかかる心"
},
"悪見": {
name: "悪見",
kana: "あくけん",
description: "曲がった事を強く思い、誠の道理を知らない心"
}
};
var akuken = {
"有身見": {
name: "有身見",
kana: "うしんけん",
description: "悪見:自分と自分のものにこだわる心"
},
"辺執見": {
name: "辺執見",
kana: "へんしゅうけん",
description: "悪見:部分に固執するかたよったものの見方"
},
"邪見": {
name: "邪見",
kana: "じゃけん",
description: "悪見:因果の法則を無視した考え方"
},
"見取見": {
name: "見取見",
kana: "けんしゅけん",
description: "悪見:自己の見解に固執し、他人の見解を否定する、諸々の諍論、対立をひきおこす心"
},
"戒禁取見": {
name: "戒禁取見",
kana: "かいごんしゅけん",
description: "悪見:誤った「仏教の実践」を正しいと思いこだわる心"
}
};
var sangai = {
"欲界": {
name: "欲界",
kana: "よくかい",
description: "欲望にとらわれた生物が住む世界"
},
"色界": {
name: "色界",
kana: "しきかい",
description: "欲望を離れた清浄な物質の世界"
},
"無色界": {
name: "無色界",
kana: "むしきかい",
description: "欲望も物質的条件も超越し、ただ精神作用にのみ住む世界"
}
};
var shitai = {
"苦諦": {
name: "苦諦",
kana: "くたい",
description: "苦という真理",
akuken: ["有身見", "辺執見", "邪見", "見取見", "戒禁取見"]
},
"集諦": {
name: "集諦",
kana: "じったい",
description: "苦の原因という真理",
akuken: ["邪見", "見取見"]
},
"滅諦": {
name: "滅諦",
kana: "めったい",
description: "苦の滅という真理",
akuken: ["邪見", "見取見"]
},
"道諦": {
name: "道諦",
kana: "どうたい",
description: "苦の滅を実現する道という真理",
akuken: ["邪見", "見取見", "戒禁取見"]
}
};
var shudou = {
"欲界": ["貪", "瞋", "癡", "慢"],
"色界": ["貪", "癡", "慢"],
"無色界": ["貪", "癡", "慢"]
};
var jiten = {
"無漸": {
name: "無漸",
kana: "むざん",
description: "内面的に恥じないこと"
},
"無愧": {
name: "無愧",
kana: "むき",
description: "人に恥じないこと"
},
"嫉": {
name: "嫉",
kana: "しつ",
description: "ねたみ"
},
"慳": {
name: "慳",
kana: "けん",
description: "ものおしみ"
},
"悪作": {
name: "悪作",
kana: "あくさ",
description: "後悔"
},
"睡眠": {
name: "睡眠",
kana: "すいめん",
description: "人に恥じないこと"
},
"掉挙": {
name: "掉挙",
kana: "じょうこ",
description: "精神的な躁状態のこと"
},
"惘沈": {
name: "惘沈",
kana: "こんじん",
description: "精神的な鬱状態のこと"
},
"忿": {
name: "忿",
kana: "ふん",
description: "いきどおり"
},
"覆": {
name: "覆",
kana: "ふく",
description: "罪をおおい隠すこと"
}
};
var bonnou = [],
bonTemp,
kai, tai, bon, ken, ten, i, key,
id = 1;
for(kai in sangai) {
for(tai in shitai) {
for(bon in rokudai) {
if (kai !== "欲界" && bon === "瞋") {
continue;
}
if (bon === "悪見") {
for(ken in akuken) {
if (shitai[tai]["akuken"].in_array(ken)) {
bonnou.push(getBonbouInfo({
"base": akuken[ken],
"sub": {name: "六大煩悩", kana: "ろくだいぼんのう", description: "根本的煩悩"},
"tai": shitai[tai],
"kai": sangai[kai],
"level": "見道"
}));
}
}
} else {
bonnou.push(getBonbouInfo({
"base": rokudai[bon],
"sub": {name: "六大煩悩", kana: "ろくだいぼんのう", description: "根本的煩悩"},
"tai": shitai[tai],
"kai": sangai[kai],
"level": "見道"
}));
}
}
}
}
for(kai in shudou) {
len = shudou[kai].length;
for(i = 0; i < len; i++) {
key = shudou[kai][i];
bonnou.push(getBonbouInfo({
"base": rokudai[key],
"sub": null,
"tai": null,
"kai": sangai[kai],
"level": "修道"
}));
}
}
for(ten in jiten) {
bonnou.push(getBonbouInfo({
"base": jiten[ten],
"sub": {name: "十纏", kana: "じってん", description: "枝末煩悩"},
"tai": null,
"kai": null,
"level": null
}));
}
db.collection('bonnou', function(err, collection) {
collection.insert(bonnou, {safe:true}, function(err, result) {});
});
function getBonbouInfo(params) {
var base = params["base"],
sub = params["sub"],
tai = params["tai"],
kai = params["kai"],
level = params["level"],
bonnou = {};
bonnou["id"] = id;
id++;
bonnou["name"] = base["name"];
bonnou["kana"] = base["kana"];
bonnou["description"] = base["description"];
bonnou["category"] = sub ? sub["name"] : null;
bonnou["category_kana"] = sub ? sub["kana"] : null;
bonnou["category_description"] = sub ? sub["description"] : null;
bonnou["satya"] = tai ? tai["name"] : null;
bonnou["satya_kana"] = tai ? tai["kana"] : null;
bonnou["satya_description"] = tai ? tai["description"] : null;
bonnou["dhaatu"] = kai ? kai["name"] : null;
bonnou["dhaatu_kana"] = kai ? kai["kana"] : null;
bonnou["dhaatu_description"] = kai ? kai["description"] : null;
bonnou["level"] = level;
return bonnou;
}
};
这是一个又长又一丝不苟的代码。
在查找煩惱的定義時,創造這個地方是我最困難的事情之一。
一旦访问/api,则使用findAll函数获取所有的烦恼。
如果有访问/api/{id},则通过findById获取特定的烦恼。
从「使用Node.js、Express和MongoDB创建REST API」的文章中,我做了些改进。我希望可以从外部的JavaScript中使用它,因此我添加了对JSONP的支持,还使其能够缓存结果以减少繁杂的计算。
只需编写以下JS代码即可访问煩悩API。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
type: 'GET',
url: 'http://bonnou.info/api/1',
jsonpCallback: 'cb',
dataType: 'jsonp',
success: function(json){
console.log(json);
}
});
</script>
尽管 MongoDB Advent Calendar 上对 MongoDB 的解释并不充分,但是我认为 Node.js 和 MongoDB 的结合非常方便易用,因此觉得很实用。
制作过程非常有趣。
请使用烦恼API度过一个舒适的烦恼生活,在年终之际。
多一点+额外的东西
今天的纠结,jsdo.it上的示例。
这里有源代码。
请在以下内容中找到答案。
-
- 煩悩ってナニ?
-
- オンライン版 仏教辞典
-
- Creating a REST API using Node.js, Express, and MongoDB
-
- Seems to be a problem compiling mongodb.rb definition with chef-client 11.2.0
-
- MongoDBでゆるふわDB体験
-
- MongoDBでdatabaseを削除する方法
-
- 「Please ensure that you set the default write concern for the database by setting」on connect-mongodb
express