usmain.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. var us = {}; //注册命名空间。
  2. //----------------------------------------引用包含系统模块---------------------------------
  3. us.http = require('http');//引用包含http处理类
  4. us.querystring = require("querystring"); //引用获取参数类
  5. us.url = require("url"); //引用url地址处理类
  6. var path = require("path");
  7. var fs = require('fs');
  8. //-----------------------------------------引用包含用户模块---------------------------------
  9. //us._usdb = require('./us.db.js'); //包含另外一个文件
  10. // us.mongodb = require('./us.mongodb.js'); //引用mongodb数据库文件
  11. // us.webServer = require('./webServer');
  12. // us.readFile = require('./readFile');
  13. us.test = (req, res, _dir, dirname) => {
  14. let html = "<head><meta charset='utf-8'></head>";
  15. try {
  16. // 用户访问目录
  17. let files = fs.readdirSync(dirname + _dir);
  18. let fileName = null;
  19. for (let i in files) {
  20. // 判断后缀
  21. if (path.extname(files[i]) === "") {
  22. // 递归
  23. us.test(req, res, _dir + '/' + files[i], dirname)
  24. }
  25. fileName = files[i];
  26. html += "<div><a href='" + _dir + '/' +fileName + "'>" + fileName + "</a></div>";
  27. }
  28. return html
  29. } catch (e) {
  30. html += '<h1>您访问的目录不存在</h1>';
  31. }
  32. }
  33. //----------------------------------------接受http请求--------------------------------------
  34. us.http.createServer(function (req, res) {
  35. //备注:res.writeHead(200, {'Content-Type': 'text/plain'});//英文编码
  36. //备注:传递表单需要添加,'application/x-www-form-urlencoded'
  37. //备注:Access-Control-Allow-Origin解决ie10跨域,还未完全其他跨域,如chrome等,需要进一步完善。
  38. //备注:"Content-Type": "text/html;charset=utf-8"解决nodejs连接mysql中文编码问题
  39. //备注:'Access-Control-Allow-Origin': '*' 解决nodejs Access-Control-Allow-Origin不允许跨域调用的问题。现在用端口有这个问题,以后需要移除。
  40. //console.log("ok");没有调试模式,只能用这个输出错误。
  41. res.writeHead(200, { "Content-Type": "text/html;charset=utf-8", 'Access-Control-Allow-Origin': '*' });
  42. // us.readFile(req, res, us.url, us.path)
  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. var allowPath = ['/www'] // 允许访问的目录
  51. var toPath = req.url; // 当前访问路径
  52. if (allowPath.indexOf(toPath) !== -1) {
  53. var result = us.test(req, res, toPath, __dirname)
  54. }
  55. res.end(result);
  56. //获取参数结束。
  57. req.on('end', function () {
  58. //querystring.parse可以把形如mode=select&test=1111的字符串拆分成一个json对象,不过这个对象很奇怪,直接输出这个对象会报错
  59. var _postJson = us.querystring.parse(params);
  60. console.log(_postJson);
  61. //只能通过以下方式获取其中的值。这就有一定的局限性。。还需要研究。
  62. var _mode = _postJson.mode; //前台传递进来的插入删除等模式
  63. var _usjson = _postJson.usjson; //前台传递进来的参数
  64. // switch (_mode) {
  65. // case "select":
  66. // //访问mysql数据库
  67. // // us._usdb.aaaaaa(function (results) {res.end(results); });
  68. // //us._usdb.usproselect("CALL PB_Select();", function (results) { res.end(results); });
  69. // //访问mongodb数据库
  70. // //us.mongodb.select("aaaaatest", function (results) { res.end(results); });
  71. // //访问mongodb存储过程
  72. // //us.mongodb.pro("test", function (results) { res.end(results); });
  73. // //us.mongodb.testparam("ttt", function (results) { res.end(results); });
  74. // break;
  75. // case "insert": res.end(_usjson); break;
  76. // default: res.end("default 1473"); break;
  77. // }
  78. //res.end(_mode);
  79. });
  80. //备注第一个参数为构建连接字符串,第二个参数为异步查询数据库结束后调用的回调函数
  81. //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) {if (results === 'false') { throw Error; } else { res.end(results);}});//加错误处理
  82. //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) { res.end(results);});\
  83. //res.end("\n node js end! ");
  84. }).listen(1337, "127.0.0.1");
  85. console.log('Server running at http://127.0.0.1:1337/');
  86. //上面2行代码必须转换为域名,否则会跨域错误