美文网首页程序员
原生node.js路由案例 -- 学习笔记

原生node.js路由案例 -- 学习笔记

作者: Mr_欢先生 | 来源:发表于2017-08-03 17:23 被阅读227次

1.简单小路由案例

var http = require("http");
var server = http.createServer(function(req,res){
    let userurl = req.url;
    res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"})
    if(userurl.substr(0,9) == "/student/"){
        let studentId = userurl.substr(9);
        if(/\d{10}/.test(studentId)){
            res.end("你好,您要查询的学生ID为:"+studentId)
        }else{
            res.end("您的学号输入错误!请查证后再输入!");
        }
            
    }else if(userurl.substr(0,9) == "/teacher/"){
        let teacherId = userurl.substr(9);
        if(/\d{10}/.test(teacherId)){
            res.end("你好,您要查询的老师工号为:"+teacherId)
        }else{
            res.end("老师工号输入错误!请查证后再输入!");
        }
    }else{
        res.end("您输入的类别有问题!请检查后再输入!");
    }
    
})
//监听端口
 server.listen(3000,"127.0.0.1");

将服务器挂起:node router.js

访问:http://127.0.0.1:3000/teacher/1561040915


访问:http://127.0.0.1:3000/student/8214533000
访问:http://127.0.0.1:3000/asdas/8214533000

2.探求事件环机制

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

var server = http.createServer(function (req,res) {
    res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"})
    fs.readFile("./a.txt",function (err,data) {//第一个参数是完整路径,第二个参数是回调函数
        if(err){
            throw err;
        }
        console.log(`我是1`);
        res.end(data);
    });
    console.log(`我是2`);
});
server.listen(3000,"127.0.0.1");
页面 控制台

3.把异步变同步

iterator迭代器就是强行把异步的函数,变成同步的函数

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

var server = http.createServer(function(req,res){
    //不处理收藏夹小图标
    if(req.url == "/favicon.ico"){
        return;
    }
    //遍历album里面的所有文件、文件夹
    fs.readdir("./album/",function(err,files){
        //files是一个存放文件(夹)名的数组
        //存放文件夹的数组
        var testFile = [];
        //迭代器就是强行把异步的函数,变成同步的函数
        //1做完了,再做2;2做完了,再做3
        (function iterator(i){
            //遍历结束
            if(i == files.length){
                console.log(testFile);
                return;
            }
            fs.stat("./album/" + files[i],function(err,stats){
                //检测成功之后做的事情
                if(stats.isDirectory()){
                    //如果是文件夹,那么放入数组。不是,什么也不做。
                    testFile.push(files[i]);
                }
                iterator(i+1);
            });
        })(0);
    });
    res.end();
});

server.listen(3000,"127.0.0.1");
image.png

4.静态资源文件管理

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

http.createServer(function(req,res){
    //得到用户的路径
    var pathname = url.parse(req.url).pathname;
    //默认首页
    if(pathname == "/"){
        pathname = "index.html";
    }
    //拓展名
    var extname = path.extname(pathname);

    //真的读取这个文件
    fs.readFile("./static/" + pathname,function(err,data){
        if(err){
            //如果此文件不存在,就应该用404返回
            fs.readFile("./static/404.html",function(err,data){
                res.writeHead(404,{"Content-type":"text/html;charset=UTF8"});
                res.end(data);
            });
            return;
        };
        //MIME类型,就是
        //网页文件:  text/html
        //jpg文件 :   image/jpg
        var mime = getMime(extname);
        res.writeHead(200,{"Content-type":mime});
        res.end(data);
    });

}).listen(3000,"127.0.0.1");

function getMime(extname){
    switch(extname){
        case ".html" :
            return "text/html";
            break;
        case ".jpg" : 
            return "image/jpg";
            break;
        case ".css":
            return "text/css";
            break;
    }
}


相关文章

网友评论

    本文标题:原生node.js路由案例 -- 学习笔记

    本文链接:https://www.haomeiwen.com/subject/bsnulxtx.html