Node.js+MongoDB+WebSocket 实现前端后台的操作

 一、写在开始

  突然心血来潮,想使用nodejs+mongodb来实现后台,并使用websocket来操作前端。想找一篇文章来学习,但是发现基本都是在水经验,浪费了不少时间,于是自己就上手撸了一套代码处理,不过也学习了不少,在这里献丑记录一下,仅供参考,不喜勿喷。当然,在这里就不介绍nodejs、mongodb和websocket了,第一次写这种文章,就不献丑了。

二、使用Nodejs包管理器

  1、首先使用nodejs的包管理器安装自己需要的第三方的模块。

安装mongodb模块  npm install mongodb -s
安装websocket模块  npm install nodejs-websocket -s

  2、新建mongodb配置文件(建议写成配置,自己想加什么配置就加什么配置) mongodbConfig.js 

    a、mgDrive为驱动

    b、table为数据库表名

exports.Mongodb = {
    "mgDrive": {
        "connStr": "mongodb://localhost:",
        "Port": "27017/",
        "database": "ProductSys",
    },
    "table": {
        "tbUser": "dbo.tbUser",
        "tbAdmin": "dbo.tbAdmin",
    },
};
View Code

  3、新建mongodb操作文件 db.js

    a、导入第三方模块 

var MongoClient = require("mongodb").MongoClient;      
var mg = require("../../../config/mongodbConfig").Mongodb;

    b、连接mongodb

function _connect(callback) {
    MongoClient.connect(mg.mgDrive.connStr + mg.mgDrive.Port, {useNewUrlParser: true}, function (err, client) {
        if (err) {
            console.log("连接失败");
        } else {
            //指定数据库的名字"ProductSys"
            var db = client.db(mg.mgDrive.database);
            callback(db);
        }
    })
}
View Code

     c、开始数据查询 table为数据库表名,obj为查询参数,callback为回调函数

/**
 * 登陆
 * @param table
 * @param obj
 * @param callback
 */
module.exports.login = function (table, obj, callback) {
    if (obj === undefined || obj === "" || obj == null || obj === {}) {
        return "请输入账号和密码";
    } else {
        _connect(function (db) {
            db.collection(table).find(obj).toArray(function (err, res) {
                callback(err, res, "登陆成功");
            })
        })
    }
};  

  4、使用测试文件测试代码 test.js

var db = require("./db.js");
var tbAdmin = "dbo.tbAdmin";

//登陆
var whereStr = {"ALoginID":'zhangsan',"APassWord":"123456"};
db.login(tbAdmin,whereStr,function (err,data) {
    console.log(data)
});

    结果:如下图

 突然不想写了  随便贴个代码说明我有做了

var adminQ = require("../../common/controller/admin/queryAdmin");
var userQ = require("../../common/controller/user/queryUser");
var adminA = require("../../common/controller/admin/actionAdminr");
var userA = require("../../common/controller/user/actionUser");

var ws = require('nodejs-websocket');
var Tips = require("../../../config/zh-Ch");
var WebSocket = require("../../../config/WebSocket").WebSocket;

//日志
var log = require("../../assets/log4js/log4js");
//邮箱
var mail=require("../../email/nodemailer");
/**
 * @创建端口号
 * @type {string}
 */
var PORT = WebSocket.wsDrive.Port, HOST = WebSocket.wsDrive.Host;


var wsServer = ws.createServer(function (conn, res) {
    console.log(Tips.Setting.Success["204"]);
    conn.on(WebSocket.wsDrive.Text, function (str) {

        //前端传来的数据
        var data = JSON.parse(str);

        //用户权限 admin || image
        var Role = data.Role.toLowerCase();

        //状态码
        var Tag = data.Tag.toLowerCase();

        //控制器
        var Controller = data.Controller.toLowerCase();
        //循环权限
        switch (Role) {
            //判断管理员
            case Tips.Setting.Role.Admin:
                //循环Admin传来的Tag
                switch (Tag) {
                    //管理员登陆
                    case WebSocket.Tag.Admin.A:
                        adminQ.adminLoginController(Controller, data.param.obj, function (err, res) {
                            conn.sendText(JSON.stringify(res))
                        });
                        break;
                    //管理员查询用户所有信息
                    case  WebSocket.Tag.Admin.S:
                        adminQ.selectUserInfo_admin(Controller, data.param.obj, function (err, res) {
                            conn.sendText(JSON.stringify(res))
                        });
                        break;
                    //管理员修改
                    case WebSocket.Tag.Admin.U:
                        adminA.update_admin(Controller, data.param.obj, function (err, res) {
                            conn.sendText(JSON.stringify(res))
                        });
                        break;
                    case WebSocket.Tag.Admin.D:
                        console.log("res :", Controller, data.param.obj);
                        adminA.delete_user(Controller, data.param.obj, function (err, res) {

                            conn.sendText(JSON.stringify(res))
                        });
                        break;
                    default:
                        break;
                }
                break;

            //判断用户
            case Tips.Setting.Role.User:

                //循环User传来的Tag
                switch (Tag) {
                    //用户登陆
                    case WebSocket.Tag.User.L:
                        userQ.userLoginController(Controller, data.param.obj, function (err, res) {
                            conn.sendText(JSON.stringify(res))
                        });
                        break;
                    //用户查询
                    case WebSocket.Tag.User.S:
                        userQ.selectUserInfo_user(Controller, data.param.obj, async function (err, res) {
                            await conn.sendText(JSON.stringify(res))
                        });
                        break;
                    //用户修改
                    case WebSocket.Tag.User.U:
                        userA.update_user(Controller,data.param.obj, function (err, res) {
                            conn.sendText(JSON.stringify(res))
                        });
                        break;
                    //忘记密码
                    case WebSocket.Tag.User.F:
                        userA.ForgetPwd(Controller,data.param.obj,function (err,res) {
                            if (res!=""){
                                mail.emaileFun(res);
                            }
                            conn.sendText(JSON.stringify(res))
                        });
                        break;
                    default:
                        break;
                }
                break;

            //默认
            default:
                conn.sendText(JSON.stringify(data));//收到直接发回去
                break;
        }
    });

    conn.on(WebSocket.wsDrive.Close, function (code, reason) {
        var logger = log.log.getLogger("[" + "WebSocket:" + WebSocket.wsDrive.Close + "]");
        logger.off(Tips.Setting.Close.c1001);
    });
    conn.on(WebSocket.wsDrive.Error, function (err, reason) {
        var logger = log.log.getLogger("[" + "WebSocket:" + WebSocket.wsDrive.Error + "]");
        logger.error(Tips.Setting.Error["419"], err.code);
    });
    conn.on(WebSocket.wsDrive.Message, function (msg) {
        console.log(msg)
    })
}).listen(PORT);

var logger = log.log.getLogger("[WebSocket]");
logger.info('websocket wsServer listening on: ' + "ws://" + HOST + ":" + PORT);
View Code

 

posted @ 2020-02-05 10:43  无陵山  阅读(393)  评论(0)    收藏  举报