nodejs 原生代码模拟express 框架 创建http server

文件夹格式如下:


app.js

var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");

var routesObj = {};

function geFileList(path) {
    var filesList = [];
    readFile(path, filesList);
    return filesList;
}

//遍历读取文件
function readFile(path, filesList) {
    var files = fs.readdirSync(path);//需要用到同步读取
    files.forEach(walk);
    function walk(file) {
        var states = fs.statSync(path + '/' + file);
        if (states.isDirectory()) {
            readFile(path + '/' + file, filesList);
        }
        else {
            //创建一个对象保存信息
            var obj = new Object();
            obj.size = states.size;//文件大小,以字节为单位
            obj.name = file;//文件名
            obj.path = path + '/' + file; //文件绝对路径
            filesList.push(obj);
        }
    }
}

var getFileName = function (fileName) {
    var pathList = fileName.split(".");
    var fileName = pathList[0];
    return fileName;
};


function getRoutes(dir) {
    var fileList = geFileList(dir);
    if (fileList.length) {
        for (var i = 0; i < fileList.length; i++) {
            var item = fileList[i];
            var route = require(item.path);
            var routeName = "/" + getFileName(item.name);
            routesObj[routeName] = route;
        }
    }
}

var server = http.createServer(function (req, res) {
    var pathName = url.parse(req.url).pathname;
    var query = url.parse(req.url).query;
    var method = req.method.toLowerCase();

    res.writeHead(200, {"Content-Type": "text/plain"});

    processRoutes(method, pathName, query, req, res);

}).listen(8080);

getRoutes(path.join(__dirname, "./routes"));

function processRoutes(method, pathName, query, req, res) {
    var param = {};
    if (query) {
        if (query.indexOf("&") != -1) {
            var paramArr = query.split("&");

            for (var i = 0; i < paramArr.length; i++) {
                var item = paramArr[i];
                var arr = item.split("=");
                var key = arr[0];
                var val = arr[1];
                param[key] = val;
            }
        } else {
            if (query.indexOf("=") != -1) {
                param[query.split("=")[0]] = query.split("=")[1];
            }
        }
    }

    if (routesObj[pathName]) {
        if (method == "get") {
            req.query = param;
            routesObj[pathName].get(req, res);
        } else {
            req.body = param;
            routesObj[pathName].post(req, res);
        }
    } else {
        res.write("unKnow routes");
        res.end();
    }
}



hello.js

/**
 * Created by Administrator on 2016/4/25.
 */

var process = module.exports = {};

process.get = function (req, res) {
    console.log("hello get called");
    res.write("hello get called  " + req.query.name + req.query.age);
    res.end();
};

process.post = function (req, res) {

};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值