us.langfront.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /*
  2. nodejs 业务逻辑使用
  3. 此文件为nodejs业务逻辑模块
  4. 上下的注释为业务测试注释
  5. */
  6. var us = {}; //注册命名空间。
  7. //-------------------引入express模块,如果此处出错,请确认express已安装,------------------
  8. //而且express在环境变量NODE_PATH目录中
  9. var express = require('express');
  10. //创建web服务
  11. var app = express();
  12. //以当前目录下的demo目录为web应用根目录
  13. app.use(express.static(__dirname + '/'));
  14. //显示错误信息,以方便调试
  15. //app.use(express.errorHandler({
  16. // showStack: true,
  17. // dumpExceptions: true
  18. //}));
  19. //----------------------------------------引用包含系统模块---------------------------------
  20. us.http = require('http'); //引用包含http处理类
  21. us.querystring = require("querystring"); //引用获取参数类
  22. us.url = require("url"); //引用url地址处理类
  23. //-----------------------------------------引用包含用户模块---------------------------------
  24. //us._usdb = require('./us.db.js'); //包含另外一个文件
  25. us.mongodb = require('./us.mongodb.js'); //引用mongodb数据库文件
  26. us.mysql = require('./us.mysql.js'); //引用mysql数据库文件,感觉mongodb处理传统数据还是有缺陷
  27. us.cookie = require('./us.cookie.js'); //javascript处理Cookie.
  28. //----------------------------------------接受http请求--------------------------------------
  29. app.all('/', function (req, res) {
  30. //us.http.createServer(function (req, res) {
  31. //备注:res.writeHead(200, {'Content-Type': 'text/plain'});//英文编码
  32. //备注:传递表单需要添加,'application/x-www-form-urlencoded'
  33. //备注:Access-Control-Allow-Origin解决ie10跨域,还未完全其他跨域,如chrome等,需要进一步完善。
  34. //备注:"Content-Type": "text/html;charset=utf-8"解决nodejs连接mysql中文编码问题
  35. //备注:'Access-Control-Allow-Origin': '*' 解决nodejs Access-Control-Allow-Origin不允许跨域调用的问题。现在用端口有这个问题,以后需要移除。
  36. //console.log("ok");没有调试模式,只能用这个输出错误。
  37. //res.writeHead(200, { "Content-Type": "text/html;charset=utf-8", "Access-Control-Allow-Origin": "http://d.1473.cn", "access-control-allow-headers": "Origin" });
  38. //解决Chrome浏览器跨域问题。
  39. //res.writeHead(200, { "Content-Type": "text/html;application/json;charset=utf-8", 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With' });
  40. res.writeHead(200, { "Content-Type": "text/html;application/json;charset=utf-8", 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With' });
  41. //console.log(us.querystring.parse(req.headers.cookie)); //前台cookie
  42. debugger;
  43. //nodejs接收参数也要异步,编程起来就有点麻烦了,注意产生闭包情况。
  44. //NodeJS引擎中许多对象都有预定的事件,如用户在发送http请求之后获得的http.ServerRequest对象就有data和end两个事件,
  45. //其中data指接收到响应信息正文中的一部分时会触发此事件,end指完全接收完信息后都会触发一次。开发人员如果想处理响应,则需要注册回调函数
  46. //on('data') 事件 只有post 请求才能触发,由于1473都是post,所以研究这一块,传统的get方式是不一样的。
  47. var params = '';
  48. //获取参数中
  49. req.on('data', function (chunk) { params += chunk; });
  50. //获取参数结束。
  51. req.on('end', function () {
  52. //querystring.parse可以把形如mode=select&test=1111的字符串拆分成一个json对象,不过这个对象很奇怪,直接输出这个对象会报错
  53. var _postJson = us.querystring.parse(params);
  54. console.log(params);
  55. if (params == "") { console.log("参数为空!"); res.end(""); return; } //传递参数出错的情况下,保证后台不报错,还真奇怪啊。居然有时候可以有时候不可以,难道跨域检测机制有问题?
  56. //只能通过以下方式获取其中的值。这就有一定的局限性。。还需要研究。
  57. var _usparams = _postJson.mode; //前台传递进来的插入删除等模式
  58. _usparams = _usparams.split(","); //作为一个数组传递,不再拆分,可以让后台极度简化
  59. var _mode = _usparams[0]; //mode为switch中的路径参数.数组中剩下的为实际参数。暂时没有用处了
  60. //判断是mysql还是mongodb。分流。mysql是参数0,作为唯一标识。
  61. if (_usparams[0] == "mysql") {
  62. // var i; //定义循环变量,对字符串解密
  63. // for (i = 0; i < _usparams.length; i++) { _usparams[i] = decodeURIComponent(_usparams[i]); } //解密中文字符串。
  64. // var _mode = _usparams[1];
  65. // console.log(_mode);
  66. // switch (_mode) {
  67. // ////_n名字 _b简介 -i图片 _p价格。
  68. // case "Add_Develop": us.mysql.usselect("CALL Add_Develop('" + _usparams[2] + "','" + _usparams[3] + "','" + _usparams[4] + "','" + _usparams[5] + "','" + _usparams[6] + "','" + _usparams[7] + "','" + _usparams[8] + "','" + _usparams[9] + "','" + _usparams[10] + "','" + _usparams[11] + "','" + _usparams[12] + "')", function (results) { res.end(results); }); break;
  69. // case "Select_One": us.mysql.usselect("CALL Select_One('" + _usparams[2] + "')", function (results) { res.end(results); }); break;
  70. // case "Select_All": us.mysql.usselect("CALL Select_All('" + _usparams[2] + "','" + _usparams[3] + "')", function (results) { res.end(results); }); break;
  71. // default: res.end("default");
  72. // }
  73. //截取掉参数1,因为是mongodb还是mysql的标志。monogdb采用默认的,没有这个参数
  74. _usparams.splice(0, 1);
  75. us.mysql.usselect(_usparams, function (results) { res.end(results); });
  76. }
  77. else {
  78. //后台代码简化为一句话。传递req,Cookie处理类,参数数组就可以了。
  79. us.mongodb.US_CommonPro(req, us.cookie, _usparams, function (results) { res.end(results); });
  80. }
  81. // switch (_mode) {
  82. // case "Select_OneUserByID":
  83. // //console.log(_usparams[1]);
  84. // //选取一个用户的树目录
  85. // //us.mongodb.SelectOneUserByID("SelectOneUserByID", _usparams[1], function (results) { res.end(results); }); break;
  86. // us.mongodb.US_CommonPro(_usparams, function (results) { res.end(results); }); break;
  87. // default: break;
  88. // }
  89. //nodejs和其他程序语言不一样,在执行选取的过程中,照样会执行后面的代码,结果后面的代码先执行到res.end("false");导致返回false。所以default中不能返回res.end("false");
  90. //cookie判断,是否有权限做增加删除修改操作。用户id一定是传到第一个参数里面
  91. // if (us.cookie.IsloginId(req, _usparams[1])) {
  92. // switch (_mode) {
  93. // case "Add_Folder":
  94. // //添加项目或者文件夹,通用一个函数,区分在于节点深度为2的全部是项目,根节点深度为1.其他全部是文件夹。
  95. // //1为用户id,2为父亲节点id,3为父亲节点深度,4为节点id,5为节点名字。
  96. // us.mongodb.Add_Folder("Add_Folder", _usparams[1], _usparams[2], _usparams[3], _usparams[4], _usparams[5], function (results) { res.end(results); }); break;
  97. // case "Add_File":
  98. // //添加项目或者文件夹,通用一个函数,区分在于节点深度为2的全部是项目,根节点深度为1.其他全部是文件夹。
  99. // us.mongodb.Add_File("Add_File", _usparams[1], _usparams[2], _usparams[3], _usparams[4], _usparams[5], function (results) { res.end(results); }); break;
  100. // case "Delete_Folder":
  101. // us.mongodb.Delete_Folder("Delete_Folder", _usparams[1], _usparams[2], _usparams[3], function (results) { res.end(results); }); break;
  102. // case "Update_Folder":
  103. // us.mongodb.Update_Folder("Update_Folder", _usparams[1], _usparams[2], _usparams[3], _usparams[4], function (results) { res.end(results); }); break;
  104. // case "Update_FileContent":
  105. // console.log(_usparams[1]); console.log(_usparams[2]); console.log(_usparams[3]); console.log(_usparams[4]);
  106. // us.mongodb.Update_FileContent("Update_FileContent", _usparams[1], _usparams[2], _usparams[3], _usparams[4], function (results) { res.end(results); }); break;
  107. // default: break; //默认返回false,以利于前台判断。
  108. // }
  109. // }
  110. //res.end(_mode);
  111. });
  112. //备注第一个参数为构建连接字符串,第二个参数为异步查询数据库结束后调用的回调函数
  113. //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) {if (results === 'false') { throw Error; } else { res.end(results);}});//加错误处理
  114. //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) { res.end(results);});\
  115. //res.end("\n node js end! ");
  116. });
  117. //.listen(1337, "d.1473.cn");
  118. //console.log('Server running at http://d.1473.cn:1337/');
  119. //上面2行代码必须转换为域名,否则会跨域错误,或者使用express框架,把整个目录包含进去/// <reference path="us.mongodb.js" />
  120. app.listen(1337, "d-back.1473.cn"); //启动express web服务,监听1337端口
  121. console.log('express Server running at http://d-back.1473.cn:1337/');