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", }, };
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); } }) }
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);

浙公网安备 33010602011771号