• nodejs学习笔记<七> 路由


    // 引用模块(与C#中命名空间,Java中引用包同理)
    var http = require("http");
    var path = require("path");
    var fs = require("fs");
    var url = require("url");
    
    // 封装路由函数
    function Root(visit_path,request,response){
        var pathObj = url.parse(request.url,true);    // 获取请求路径,解析为url对象
        var filePath = path.join(visit_path,pathObj.pathname);    // 拼接目录路径和请求路径,组合成完整访问路径
        
        var fileContent = fs.readFileSync(filePath,'binary');    // 读取目标路径下的文件,以二进制读取(binary)
        response.write(fileContent,'binary');    //    将解析的文件以二进制(binary)方式发送
        response.end();    
    }
    
    http.createServer((request,response) => {
        Root(path.join(__dirname,'view'),request,response);    // __dirname是nodejs内置变量,用来获取当前文件所在的路径
    }).listen(8080,'127.0.0.1');
    console.log("success !");

    使用readFileSync以同步的方式读取,同步方式读取文件,若遇到请求路径下没有文件,服务器就会直接挂掉。

    // 引用模块(与C#中命名空间,Java中引用包同理)
    var http = require("http");
    var path = require("path");
    var fs = require("fs");
    var url = require("url");
    
    // 封装路由函数
    function Root(visit_path,request,response){
        var pathObj = url.parse(request.url,true);    // 获取请求路径,解析为url对象
        var filePath = path.join(visit_path,pathObj.pathname);    // 拼接目录路径和请求路径,组合成完整访问路径
        /**
         * 一般服务器路由使用readFile异步方式去读文件
         * 这样可以根据返回的错误信息做不同处理
         */
        fs.readFile(filePath,'binary',(err,fileContent) => {
            if(err){
                response.writeHead(404,'not found');
                response.end('<h1>404 未找到页面</h1>');
            }else{
                response.write(fileContent,'binary');
                response.end();
            }
        });
    }
    
    http.createServer((request,response) => {
        Root(path.join(__dirname,'view'),request,response);    // __dirname是nodejs内置变量,用来获取当前文件所在的路径
    }).listen(8080,'127.0.0.1');
    console.log("success !");

    用readFile异步方式读取就能解决请求路径下没找到文件,服务器挂掉的问题。

    readFile()的callback中第一个参数[err]是一个对象,当解析路径出错这样一个对象。

    关于 /favicon.ico 请求的问题,在请求启动服务后加上 “Server has started.” 

  • 相关阅读:
    Apache Spark源码走读之8 -- Spark on Yarn
    Apache Spark源码走读之7 -- Standalone部署方式分析
    Apache Spark源码走读之6 -- 存储子系统分析
    Linux服务器--所有用户登陆操作命令审计
    Linux--top命令查看系统状态,所有值讲解
    docker --help 详解
    Linux下使用《du》命令查看某文件及目录的大小
    Linux查看CPU《型号..》《内存..》《硬盘..》《系统..》
    Linux下 cmatrix的安装和使用
    CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
  • 原文地址:https://www.cnblogs.com/MirageFox/p/9172246.html
Copyright © 2020-2023  润新知