Node + MongoDB實(shí)現(xiàn)

很久沒更新,今天看到有人評(píng)論說很希望能更新下去,最近工作事物繁多,主要又在寫C#+Webapi這一塊。近來用node+mongoDB寫了個(gè)微信小程序服務(wù)端,就貼在這里替代一下node-mysql這個(gè)模塊。從應(yīng)用上來說,mongodb比mysql對(duì)中小公司更加友好!尤其是公司里沒有對(duì)性能追求到極致。
簡(jiǎn)單的貼一點(diǎn)代碼和相應(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容