我用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

广告
将在 10 秒后关闭
bannerAds