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.” 

猜你喜欢

转载自www.cnblogs.com/MirageFox/p/9172246.html