Node + MongoDB實現(xiàn)

很久沒更新,今天看到有人評論說很希望能更新下去义桂,最近工作事物繁多抗斤,主要又在寫C#+Webapi這一塊。近來用node+mongoDB寫了個微信小程序服務(wù)端畜伐,就貼在這里替代一下node-mysql這個模塊馍惹。從應(yīng)用上來說,mongodb比mysql對中小公司更加友好!尤其是公司里沒有對性能追求到極致万矾。
簡單的貼一點代碼和相應(yīng)配置悼吱。
添加package.json里dependencies

    "mongoose": "4.8.7",

定義data-source.js

(function(){
    var mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost:27017/test');
    module.exports = mongoose;
})();

定義UserEntity.js

/**
 * Created by HQ on 13/03/2017.
 */
(function () {
    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    module.exports = new Schema({
        user_id: String,
        phone: String,
        orders: [String],
        address: [
            {
                address_id: String,
                city: String,
                district: String,
                street: String,
                building: String,
                specific: String,
                default: Boolean
            }
        ],
        create_time: Date,
    });
})();

DAO UserDao.js

/**
 * Created by HQ on 11/03/2017.
 */
(function () {
    "use strict";

    var mongodb = require("./data-source");
    var user_schema = require("./../entity/users");
    var Promise = require("bluebird");
    var User = mongodb.model("User", user_schema);

    User.findByUserId = function (user_id) {
        return User.findOne({ user_id: user_id }).exec();
    };

    User.findByUserIdAndPassword = function (user_id, password) {
        return User.findOne({ user_id: user_id, password: password }).exec();
    };

    User.findOrderIds = function (user_id) {
        return User.findOne({ user_id: user_id }, 'orders').exec();
    };

    User.findInfosById = function (user_id) {
        return User.findOne({ user_id: user_id }, 'phone address name').exec();
    }

    var saveUser = function (user) {
        return new Promise(function (resolve, reject) {
            User.findByOpenId(user.open_id).then(
                function (exist) {
                    if (exist != undefined) {
                        return reject("existed open id" + exist);
                    }
                    let _user = new User();
                    MergeUser(user, _user);
                    _user.create_time = new Date();
                    _user.save().then(resolve, reject);
                },
                reject
            )
        });
    };

    var updateUserPhoneAndAddress = function (user) {
        return User.findOneAndUpdate({ user_id: user.user_id }, {
            $set: {
                phone: user.phone,
                address: user.address,
                name: user.name
            }
        }).exec();
    };

    var updateUserSessionKey = function (user) {
        return User.findOneAndUpdate({ user_id: user.user_id }, {
            $set: {
                session_key: user.session_key
            }
        }).exec();
    };

    var addUserOrder = function (order_id, user_id) {
        return new Promise(function (resolve, reject) {
            User.findByUserId(user_id).then(
                function (user) {
                    user.update({ $push: { orders: order_id } }
                    ).then(resolve, reject);
                },
                function () {
                    reject("user does not exist.")
                }
            );
        });
    };

    module.exports.user = User;
    module.exports.addUserOrder = addUserOrder;
    module.exports.saveUser = saveUser;
    module.exports.updateUserPhoneAndAddress = updateUserPhoneAndAddress;


    function MergeUser(req_model, entity) {
        entity.user_id = req_model.user_id;
        entity.phone = req_model.phone;
        entity.open_id = req_model.open_id;
        entity.session_key = req_model.session_key;
        entity.password = req_model.password;
        entity.name = req_model.name;
        entity.address = req_model.address;
        entity.inviter = req_model.inviter;
    }

})();

定義userroute.js

(function () {
    "use strict";

    var express = require('express');
    var router = express.Router();
    var users_dao = require('../bin/dao/users');

    var log4js = require('log4js');
    var logger = log4js.getLogger("users");

    /* update a user address and phone. */
    router.put('/contact', function (req, res) {
        logger.trace("update contact", req.body, "requester", req.session.user_id);
        let user = req.body;
        user.user_id = req.session.user_id;
        users_dao.updateUserPhoneAndAddress(user).then(function () {
            res.sendStatus(200);
        }, function (err) {
            logger.fatal("update contact failed", err);
            res.status(400).send(err);
        });
    });

    module.exports = router;
})();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市良狈,隨后出現(xiàn)的幾起案子后添,更是在濱河造成了極大的恐慌,老刑警劉巖薪丁,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遇西,死亡現(xiàn)場離奇詭異,居然都是意外死亡严嗜,警方通過查閱死者的電腦和手機粱檀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漫玄,“玉大人茄蚯,你說我怎么就攤上這事〕平” “怎么了第队?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵哮塞,是天一觀的道長刨秆。 經(jīng)常有香客問我,道長忆畅,這世上最難降的妖魔是什么衡未? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮家凯,結(jié)果婚禮上缓醋,老公的妹妹穿的比我還像新娘。我一直安慰自己绊诲,他們只是感情好送粱,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掂之,像睡著了一般抗俄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上世舰,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天动雹,我揣著相機與錄音,去河邊找鬼跟压。 笑死胰蝠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茸塞,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼躲庄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钾虐?” 一聲冷哼從身側(cè)響起读跷,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎禾唁,沒想到半個月后效览,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡荡短,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年丐枉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掘托。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘦锹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闪盔,到底是詐尸還是另有隱情弯院,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布泪掀,位于F島的核電站听绳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏异赫。R本人自食惡果不足惜椅挣,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塔拳。 院中可真熱鬧鼠证,春花似錦、人聲如沸靠抑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颂碧。三九已至荠列,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稚伍,已是汗流浹背弯予。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留个曙,地道東北人锈嫩。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓受楼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呼寸。 傳聞我的和親對象是個殘疾皇子艳汽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容