zoukankan      html  css  js  c++  java
  • 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.” 

  • 相关阅读:
    自己开发网站全文检索系统
    中国摇滚二十年(经典100首歌曲)
    有一首歌
    Snoopy.class.php使用手册
    wp-Syntax 插件使用方法
    rabbitmq使用
    小程序相关功能的实现
    知识链接
    celery使用
    阿里云服务器部署项目注意事项
  • 原文地址:https://www.cnblogs.com/MirageFox/p/9172246.html
Copyright © 2011-2022 走看看