zoukankan      html  css  js  c++  java
  • node 使用 fs, url, http 模块,组合成小型的服务器 ( 满足html请求, get, post 传值 )

    <script type="text/javascript">
        /*
         * 引入模块
         */
        var http = require('http');
        var url = require('url');
        var fs = require('fs');
        
        /*
         * 获取项目根路径(存放 WEB 项目的根目录)
         */
        var rootPath = global.__dirname + '/Node';
        
        /*
         * 创建web服务器对象 createServer
         * http.createServer(callback(){}): 创建服务器
         * callback("客户端请求对象", "服务器响应对象"): 响应服务器请求的回调函数
         */
        var server = http.createServer(function(request, response) {
            if(request.method.toUpperCase() == 'GET'){
                var pathUrl = url.parse(request.url); 
                if(pathUrl.pathname == '/'){
                    pathUrl.pathname = "/index.html";
                }
                returnHtml(rootPath + pathUrl.pathname, request, response);
                /*
                 * 获取get传值的方法
                 * querystring.parse("需要解析的字符串"), NE.JS不支持;
                 */
                console.log(returnFlied(pathUrl.query));
            } else {
                /*
                 * 获取 POST 请求
                 * request.on('data', callback(读取到的数据){}): 读取缓冲区数据的事件
                 * request.on('end', callback(){}): 打他事件结束后执行的事件
                 */
                var postStr = '';
                request.on('data', function(data){
                    postStr += data;
                });
                request.on('end', function(){
                    console.log(returnFlied(postStr));
                });
            }
        });
        
        /*
         * 启动服务器的方法 listen ( 服务器响应事件要放在这句代码之前 )
         * server.listen("端口号", "ip或域名"): 
         */
        server.listen(80, '192.168.3.143');
        
        /*
         * 根据请求读取文件的方法
         */
        function returnHtml(path, request, response) {
            fs.readFile(path, function(err, data){
                response.setHeader("content-type", 'text/html');
                if(err){
                    response.end("<h1>404 你访问的页面不存在</h1>");    
                }
                else{
                    response.end(data);                
                }
            });
        }
        
        /*
         * 解析 GET 和 POST 请求的方法
         * 自己写的
         */
        function returnFlied(str){
            var json = {};
            var atr = str.split('&');
            for(var i = 0; i < atr.length; i++){
                var keyVal = atr[i].split('=');
                json[keyVal[0]] = keyVal[1];
            }
            return json;
        }
    </script>
  • 相关阅读:
    [Hadoop 周边] Hadoop和大数据:60款顶级大数据开源工具(2015-10-27)【转】
    [Nginx] 关键概念解读
    [随想感悟] 研究技术的方法
    [Hadoop 周边] 浅谈大数据(hadoop)和移动开发(Android、IOS)开发前景【转】
    [优化] 数据库优化基础
    [随想感悟] 面试时,问哪些问题能试出一个 Android 应用开发者真正的水平?【转自知乎】
    258. Add Digits
    257. Binary Tree Paths
    256. Paint House
    255. Verify Preorder Sequence in Binary Search Tree
  • 原文地址:https://www.cnblogs.com/lovling/p/6560512.html
Copyright © 2011-2022 走看看