//包含mongodb驱动程序 var mongodb = require("mongodb"); //uscookie = require('./us.cookie.js'); //javascript处理Cookie.此处没带命名空间,好像nodejs后台是独立的,主文件usmain.js带了命名空间,以后再考虑。 //mongodb安装位置 var server = new mongodb.Server('192.168.100.71', 27017, { auto_reconnect: true }); //var server = new mongodb.Server('121.37.60.186', 14072, { auto_reconnect: true }); //指定数据库 var db = new mongodb.Db('UseStudio_Develop', server, { safe: true }); //打开数据库,console.log('connect');输出调试信息到控制台 db.open(function (err, db) { if (!err) { console.log('connect'); } else { console.log(err); } }); //尝试写一个通用存储过程。这样后台代码可以极度简单。pArr为参数数组。尝试成功 //以后做后台数据库操作,凡是调用存储过程的,都可以使用统一的解决方案,节约编码,更好控制参数。极度简单编程, exports.US_CommonPro = function (req, uscookie, pArr, callback) { var i;//定义循环变量 for (i = 0; i < pArr.length; i++) { pArr[i] = decodeURIComponent(pArr[i]); }//解密中文字符串。 //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号 var _islogin = uscookie.IsloginId(req, pArr[1]); //得到用户是否已经认证的标识。 //所有传递进来的参数后面加一个是否已经登录的标识,由于js参数任意,不会报错,可以省略很多逻辑,在数据库中可以更好发挥作用,比如选取用户,已经登录的选取不了则自动创建。 pArr.push(_islogin); //重要,向数据库追加一个认证参数,有些地方需要使用到,可以节约编码。 //拼凑参数方法 var _pro = "" + pArr[0] + "('"; //命令拼凑 for (i = 1; i < pArr.length; i++) { _pro += pArr[i]; if (i < pArr.length - 1) _pro += "','"; } //拼凑参数 _pro += "')"; //拼凑结束。 console.log(_pro); //是否有权限执行数据库后续操作 if (US_DB_Pri(req, uscookie, pArr)) { //console.log(_pro); console.log("" + pArr[0] + "('" + pArr[1] + "')");比较拼凑结果 //db.eval("" + pArr[0] + "('" + pArr[1] + "')", function (err, _json) { //元素调用方法 db.eval(_pro, function (err, _json) { //拼凑调用方法 console.log("US_CommonPro ......"); console.log(_json); callback(JSON.stringify(_json)); }); } } //有些操作需要判断用户登录Cookie.此处作为局部变量还是全局变量??????暂时不管了,以后再看 var _noPri = ["Select_OneUserByID"];//无需判断权限的操作 var _yesPri = ["Add_Folder", "Add_File", "Delete_Folder", "Update_Folder", "Update_FileContent"]; //需要判断Cookie是否有权限的操作。 //参数C为传递进来的存储过程名字,有些存储过程需要权限,有些不需要。 //pArr[0]为存储过程名字,pArr[1]为未认证userid。 //参数req为前台传递进来的请求,参数uscookie为前台传进来的Cookie类。 US_DB_Pri = function (req, uscookie, pArr) { var i; //普通选取操作,无需权限。 for (i = 0; i < _noPri.length; i++) if (pArr[0] == _noPri[i]) return true; //无需权限的操作 //需要权限的操作,比如增删改。 for (i = 0; i < _yesPri.length; i++) { if (pArr[0] == _yesPri[i]) { if (pArr[pArr.length - 1]) return true; //如果Cookie值匹配,则赋予权限,pArr[pArr.length-1]保存了Cookie值是否匹配的返回值。 else return false; //如果Cookie值不匹配,不赋予权限 } } return false;//默认返回没有权限。 } //-------------------------------------------------------------数据库操作已经封装,以下所有代码无用了,仅仅做为参考------------------------------ //选取数据的示例 exports.select = function (sql, callback) { db.collection('Develop', { safe: true }, function (err, collection) { //为啥monogodb返回多条数据不是Json。有点想不通,要先转数组,再转json。而选取一条数据好像不用 //collection.find(function (err, _json) { callback(_json); }); //查找所有数据。 //console.log(collection); collection.find().toArray(function (err, _json) { callback(JSON.stringify(_json)); }) //根据条件选取数据 //collection.find({ "UserDirectoryName": "自然岩壁" }).toArray(function (err, _json) { callback(JSON.stringify(_json)); }) //根据条件只选取一条数据。为啥取出来的还不是json,还需要转换为json?mongdb需要改写。 //collection.findOne({ "UserDirectoryName": "自然岩壁" }, function (err, _json) { callback(JSON.stringify(_json)); }) }); } //选取一个指定用户id的用户 exports.SelectOneUserByID = function (sql, userid, callback) { //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号 //db.eval("testparam('自然岩壁')", function (err, _json) { db.eval("Select_OneUserByID('" + userid + "')", function (err, _json) { console.log("SelectOneUserByID ......"); console.log(_json); callback(JSON.stringify(_json)); }); } //创建一个项目或者文件夹。 exports.Add_Folder = function (sql, userid, parentid, parentdeep, folderid, foldername, callback) { //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号 //db.eval("testparam('自然岩壁')", function (err, _json) { db.eval("Add_Folder('" + userid + "','" + parentid + "','" + parentdeep + "','" + folderid + "','" + foldername + "')", function (err, _json) { console.log("Add_Folder ......"); callback(JSON.stringify(_json)); }); } //创建一个文件 exports.Add_File = function (sql, userid, parentid, parentdeep, fileid, filename, callback) { //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号 //db.eval("testparam('自然岩壁')", function (err, _json) { db.eval("Add_File('" + userid + "','" + parentid + "','" + parentdeep + "','" + fileid + "','" + filename + "')", function (err, _json) { console.log("Add_File ......"); callback(JSON.stringify(_json)); }); } //删除一个项目或者文件夹 exports.Delete_Folder = function (sql, userid, parentdeep, folderid, callback) { //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号 db.eval("Delete_Folder('" + userid + "','" + parentdeep + "','" + folderid + "')", function (err, _json) { console.log("Delete_Folder ......"); callback(JSON.stringify(_json)); }); } //更新一个项目或者文件夹 exports.Update_Folder = function (sql, userid, parentdeep, folderid, foldername, callback) { //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号 db.eval("Update_Folder('" + userid + "','" + parentdeep + "','" + folderid + "','" + foldername + "')", function (err, _json) { console.log("Update_Folder ......"); callback(JSON.stringify(_json)); }); } //更新一个文件的内容 exports.Update_FileContent = function (sql, userid, parentdeep, fileid, filecontent, callback) { //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号 db.eval("Update_FileContent('" + userid + "','" + parentdeep + "','" + fileid + "','" + filecontent + "')", function (err, _json) { console.log("Update_FileContent ......"); console.log(_json); callback(JSON.stringify(_json)); }); } exports.Operating = function (ele, callback) { db.eval('Operating("' + ele + '")', function (err, _json) { console.log(_json); console.log(err); callback(JSON.stringify(_json)); }); } //存储过程示例,带参数 exports.testparam = function (sql, callback) { var _param = "自然岩壁"; console.log(_param); //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号 //db.eval("testparam('自然岩壁')", function (err, _json) { db.eval("testparam('"+_param+"')", function (err, _json) { console.log(_json); callback(JSON.stringify(_json)); }); } exports.Modify = function (ele, callback) { console.log(ele); db.eval('DOP_modifyedit("' + ele + '")', function (err, _json) { console.log(_json); console.log(err); callback(JSON.stringify(_json)); callback(JSON.stringify(err)); }); } //封装数据库连接,暂时不做。以后再看 /*BlogProvider = function (host, port, database) { //指定服务器 this.server = new mongodb.Server(host, port, { safe: false }, { auto_reconnect: true }, {}); //指定数据库 this.db = new mongodb.Db(database, this.server); //打开连接 this.db.open(function (err, db) { if (!err) { console.log('connect'); } else { console.log(err); } }); } BlogProvider.prototype.proselect = function (sql, callback) { db.eval("testpro()", function (err, _json) {console.log(_json);callback(JSON.stringify(_json));});} exports.BlogProvider = BlogProvider;*/