udbbbn 8 vuotta sitten
vanhempi
commit
9c8009cb5d
5 muutettua tiedostoa jossa 109 lisäystä ja 25 poistoa
  1. 1 1
      .vscode/launch.json
  2. 32 0
      readFile.js
  3. 1 2
      usexpressmain.js
  4. 52 20
      usmain.js
  5. 23 2
      webServer.js

+ 1 - 1
.vscode/launch.json

@@ -8,7 +8,7 @@
         "type": "node",
         "request": "launch",
         "name": "Launch Program",
-        "program": "${workspaceFolder}/webServer_test.js"
+        "program": "${workspaceFolder}/usmain.js"
     },
         {
             "type": "node",

+ 32 - 0
readFile.js

@@ -0,0 +1,32 @@
+module.exports = function (request, response, url, path) {
+    var fs = require('fs')
+
+    var staticPath = "./www/";
+    var pathName = url.parse(request.url).pathname,
+        realPath = path.join(staticPath, pathName); // 请求文件的在磁盘中的真实地址
+
+    fs.exists(realPath, (exists) => {
+        if (!exists) {
+            // 当文件不存在时
+            response.writeHead(404, { "Content-Type": "text/plain" });
+
+            response.write("This request URL ' " + realPath + " ' was not found on this server.");
+            response.end();
+        } else {
+            // 当文件存在时
+            fs.readFile(realPath, (err, file) => {
+                if (err) {
+                    // 文件读取出错
+                    response.writeHead(500, { "Content-Type": "text/plain" });
+
+                    response.end(err);
+                } else {
+                    // 当文件可被读取时,输出文本流
+                    response.writeHead(200, { "Content-Type": "text/plain" });
+                    response.write(file, "binary");
+                    response.end();
+                }
+            });
+        }
+    });
+}

+ 1 - 2
usexpressmain.js

@@ -31,8 +31,7 @@ app.all("*", function (req, res) {
     //console.log("ok");没有调试模式,只能用这个输出错误。
     //下面的头查了大概1周时间,必须这样写。
     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' });
-
-    debugger;
+    // debugger;
     //nodejs接收参数也要异步,编程起来就有点麻烦了,注意产生闭包情况。
     //NodeJS引擎中许多对象都有预定的事件,如用户在发送http请求之后获得的http.ServerRequest对象就有data和end两个事件,
     //其中data指接收到响应信息正文中的一部分时会触发此事件,end指完全接收完信息后都会触发一次。开发人员如果想处理响应,则需要注册回调函数

+ 52 - 20
usmain.js

@@ -1,11 +1,36 @@
 var us = {}; //注册命名空间。
 //----------------------------------------引用包含系统模块---------------------------------
-http = require('http');//引用包含http处理类
+us.http = require('http');//引用包含http处理类
 us.querystring = require("querystring"); //引用获取参数类
 us.url = require("url"); //引用url地址处理类
+var path = require("path");
+var fs = require('fs');
+
 //-----------------------------------------引用包含用户模块---------------------------------
-us._usdb = require('./us.db.js'); //包含另外一个文件
-us.mongodb = require('./us.mongodb.js'); //引用mongodb数据库文件
+//us._usdb = require('./us.db.js'); //包含另外一个文件
+// us.mongodb = require('./us.mongodb.js'); //引用mongodb数据库文件
+// us.webServer = require('./webServer');
+// us.readFile = require('./readFile');
+
+us.test = (req, res, _dir, dirname) => {
+    let html = "<head><meta charset='utf-8'></head>";
+    try {
+        // 用户访问目录
+        let files = fs.readdirSync(dirname + _dir);
+        let fileName = null;
+        for (let i in files) {
+            if (path.extname(files[i]) === "") {
+                us.test(req, res, _dir + '/' + files[i], dirname)
+            }
+            fileName = files[i];
+            html += "<div><a  href='" + _dir + '/' +fileName + "'>" + fileName + "</a></div>";
+        }
+        return html
+    } catch (e) {
+        html += '<h1>您访问的目录不存在</h1>';
+    }
+}
+
 
 //----------------------------------------接受http请求--------------------------------------
 us.http.createServer(function (req, res) {
@@ -17,7 +42,7 @@ us.http.createServer(function (req, res) {
     //备注:'Access-Control-Allow-Origin': '*'  解决nodejs  Access-Control-Allow-Origin不允许跨域调用的问题。现在用端口有这个问题,以后需要移除。
     //console.log("ok");没有调试模式,只能用这个输出错误。
     res.writeHead(200, { "Content-Type": "text/html;charset=utf-8", 'Access-Control-Allow-Origin': '*' });
-    debugger;
+    // us.readFile(req, res, us.url, us.path)
 
     //nodejs接收参数也要异步,编程起来就有点麻烦了,注意产生闭包情况。
     //NodeJS引擎中许多对象都有预定的事件,如用户在发送http请求之后获得的http.ServerRequest对象就有data和end两个事件,
@@ -26,6 +51,13 @@ us.http.createServer(function (req, res) {
     var params = '';
     //获取参数中
     req.on('data', function (chunk) { params += chunk; });
+    var allowPath = '/www'
+    var toPath = req.url;
+    if (allowPath == toPath) {
+        var result = us.test(req, res, toPath, __dirname)
+    }
+ 
+    res.end(result);
     //获取参数结束。
     req.on('end', function () {
         //querystring.parse可以把形如mode=select&test=1111的字符串拆分成一个json对象,不过这个对象很奇怪,直接输出这个对象会报错
@@ -34,26 +66,26 @@ us.http.createServer(function (req, res) {
         //只能通过以下方式获取其中的值。这就有一定的局限性。。还需要研究。
         var _mode = _postJson.mode; //前台传递进来的插入删除等模式
         var _usjson = _postJson.usjson; //前台传递进来的参数
-        switch (_mode) {
-            case "select":
-                //访问mysql数据库
-                us._usdb.aaaaaa(function (results) {res.end(results); });
-                //us._usdb.usproselect("CALL PB_Select();", function (results) { res.end(results); });
-                //访问mongodb数据库
-                //us.mongodb.select("aaaaatest", function (results) { res.end(results); });
-                //访问mongodb存储过程
-                //us.mongodb.pro("test", function (results) { res.end(results); });
-                //us.mongodb.testparam("ttt", function (results) { res.end(results); });
-                break;
-            case "insert": res.end(_usjson); break;
-            default: res.end("default 1473"); break;
-        }
+        // switch (_mode) {
+        //     case "select":
+        //         //访问mysql数据库
+        //         // us._usdb.aaaaaa(function (results) {res.end(results); });
+        //         //us._usdb.usproselect("CALL PB_Select();", function (results) { res.end(results); });
+        //         //访问mongodb数据库
+        //         //us.mongodb.select("aaaaatest", function (results) { res.end(results); });
+        //         //访问mongodb存储过程
+        //         //us.mongodb.pro("test", function (results) { res.end(results); });
+        //         //us.mongodb.testparam("ttt", function (results) { res.end(results); });
+        //         break;
+        //     case "insert": res.end(_usjson); break;
+        //     default: res.end("default 1473"); break;
+        // }
         //res.end(_mode);
     });
     //备注第一个参数为构建连接字符串,第二个参数为异步查询数据库结束后调用的回调函数
     //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) {if (results === 'false') { throw Error; } else { res.end(results);}});//加错误处理
     //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) { res.end(results);});\
     //res.end("\n node js end! ");
-}).listen(1337, "nodejs.1473.cn");
-console.log('Server running at http://nodejs.1473.cn:1337/');
+}).listen(1337, "127.0.0.1");
+console.log('Server running at http://127.0.0.1:1337/');
 //上面2行代码必须转换为域名,否则会跨域错误

+ 23 - 2
webServer.js

@@ -143,7 +143,7 @@ app.dir = function (_dir, dirname, bool) {
             let files = fs.readdirSync(dirname + _dir);
             let fileName = null;
             for (let i in files) {
-                if (path.extname(files[i]) === "" && bool === true) {
+                if (path.extname(files[i]) === "" && bool === "true") {
                     app.dir(_dir + '/' + files[i], dirname, bool)
                 }
                 fileName = files[i];
@@ -220,9 +220,30 @@ app.doDir = () => {
         i = i.split(',');
         app.dir(i[0], __dirname, i[1]);
     }
-    app.listen(config.port, config.host);
+    // app.listen(config.port, config.host);
 }
 
 app.resolve();
 
+
+app.test = (req, res, _dir, dirname) => {
+    let html = "<head><meta charset='utf-8'></head>";
+    try {
+        // 用户访问目录
+        let files = fs.readdirSync(dirname + _dir);
+        let fileName = null;
+        for (let i in files) {
+            if (path.extname(files[i]) === "") {
+                app.test(req, res, _dir + '/' + files[i], dirname)
+            }
+            fileName = files[i];
+            html += "<div><a  href='" +_dir + '/' + fileName + "'>" + fileName + "</a></div>";
+        }
+    } catch (e) {
+        html += '<h1>您访问的目录不存在</h1>';
+    }
+    res.writeHead(200, {'content-type': 'text/html'});
+    res.end(html);
+}
+
 module.exports = app