Nodejs中文API文档以及部分模块实例

霸气de小男生 提交于 2019-12-01 04:36:20

重要:Node.js v10.15.1中文api文档http://nodejs.cn/api/
1、用户→apache、Nginx、Tomact→php;用户→nodejs。
2、nodejs中将有很多的功能,划分为一个个mudule,大陆翻译为模块。这是因为有一些程序需要使用fs(文件读取)功能,有一些不用,所以为了效率,你用啥,你就require啥。
3、http模块:

var http = require("http");
//创建一个服务器,回调函数表示接收到请求之后做的事情。req请求,res响应。
var server = http.createServer(function(req,res){
   console.log("服务器接收到请求"+req.url);
   //若是没有res.end则浏览器一直转圈。
   res.end("");
});
//监听接口
server.listen(3000,"127.0.0.1");

4、req里面可以使用的东西。最关键的是req.url属性,表示用户请求url地址。所有路由的设计,都是通过req.url来实现的。
我们关心的不是拿到url而是识别url。识别url,用到两个模块,一个是url模块,另一个querystring是模块。字符串查询用querystring。
5、url.parse()用法
该文件创建在H盘nodedemo文件夹下,命名为04_req.js

var http = require("http");
var url = require("url");
var server = http.createServer(function(req,res){
   //url.parse()可以将一完整的url地址,分为多个部分
   //host、port、pathname、path、query
   var pathname = url.parse(req.url).pathname;
   //url.parse()如果第二个参数为true那么可以将查询变为对象
   var query = url.parse(req.url,true).query;
    //就可以直接打点得到这个参数
   var age = query.age;
   console.log("pathname:"+pathname);
   console.log(query);
   console.log("age:"+age);
   res.end("");
});
server.listen(3000,"127.0.0.1");

结果图:

H:\nodedemo>node 04_req.js
pathname:/abcd/adst/1.html
[Object: null prototype] { id: '123', sex: 'man', age: '18' }
age:18

6、当用户访问/student/1234567890的查询此学号的学生信息,当用户方位/teacher/645433的时候,查询此老师的信息。其他时,提示错误。若是位数不对,也是提示位数不对。

var http = require("http");
var server = http.createServer(function(req,res){
    var userurl = req.url;
    res.writeHead(200,{"Content-Type":"text/html;charset=utf8"});
    if(userurl.substr(0,9) == "/student/"){
        var studentid = userurl.substr(9);
        console.log(studentid);
        if(/\d{10}/.test(studentid)){
            res.end("您哟啊查询的学生信息id为:"+studentid);
        }else{
            res.end("学生学号位数不对。");
        }
    }else if(userurl.substr(0,9) == "/teacher/"){
        var teacherid = userurl.substr(9);
        if(/\d{6}$/.test(teacherid)){
            res.end("您哟啊查询的学生信息id为:"+teacherid);
        }else{
            res.end("老师学号位数不对。");
        }
    }else{
        res.end("请检查url");
    }
});
server.listen(3000,"127.0.0.1");

7、fs模块以及事件环机制(经典案例)

var http = require("http");
var fs = require("fs");
var server = http.createServer(function(req,res){
    if(req.url == "/favicon.ico"){
        return;
    }
    //不处理小图标,强行输入五位数。事件环不干扰其他人进入。
    var userid = parseInt(Math.random()*89999)+10000;
    console.log("欢迎"+ userid);
    res.writeHead(200,{"Content-Type":"text/html;charset=gbk"});
    //两个参数,第一个是完整路径,当前目录为./,第二个为回调函数
    fs.readFile("./1.txt",function(err,data){
        if(err){
            throw err;
        }
        console.log(userid = "文件读取完毕");
        res.end(data);
    });
});
server.listen(3000,"127.0.0.1");

8、创建文件夹
在album中创建aaa文件夹。

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

var server = http.createServer(function(req,res){
    if(req.url == "/favicon.ico"){
        return;
    }
    fs.mkdir("./album/aaa",function(err){
        if(err){
            return console.error(err);
        }
        console.log("目录创建成功。");
    });
});
server.listen(3000,"127.0.0.1");

9、异步函数
在nodedemo文件夹下创建album以及11.js文件。然后在album文件夹下添加aaa文件夹、bbb文件夹和若干图片。

var http = require("http");
var fs = require("fs");
var server = http.createServer(function(req,res){
    if(req.url == "/favicon.ico"){
        return;
    }
    //异步函数.干扰了全局变量。就是aaa文件还未执行完毕,就执行了bbb文件,并把bbb文件push进去了。
   var wenjianjia = [];
   fs.readdir("./album",function(err,files){
       //files是文件名的数组不是文件的数组,表示./album这个文件夹中的所有东西
       //包括文件以及文件夹
       //console.log(files);
        for(var i = 0;i<files.length;i++){
            var thefilename = files[i];
            //console.log(thefilename);
            //又要一次检测
            fs.stat("./album/" + thefilename,function(err,stats){
                //如果是一个文件夹 就输入它
                if(stats.isDirectory()){
                    wenjianjia.push(thefilename);
                }
                console.log(wenjianjia);
            });
        }     
   });
});
server.listen(3000,"127.0.0.1");

结果:

H:\nodedemo>node 11.js
[]
[]
[]
[]
[]
[]
[ 'bbb' ]
[ 'bbb', 'bbb' ]

10、把9中的异步函数变为同步函数

var http = require("http");
var fs = require("fs");
var server = http.createServer(function(req,res){
    if(req.url == "/favicon.ico"){
        return;
    }
    //files:["0.jpg","1.jpg",.."aaa","bbb"]
    //遍历album里面的所有文件以及文件夹
    fs.readdir("./album/",function(err,files){
        var wenjianjia = [];
        //迭代器  强行把异步变为同步函数 1做完了 再做2,2做完了 再做3
       (function iterator(i){
           //防止越界。遍历结束
           if(i == files.length){
               console.log(wenjianjia);
               return;
           }
            fs.stat("./album/" + files[i],function(err,stats){
                //检测成功之后做的事情
                if(stats.isDirectory()){
                    //如果是文件夹,放入数组。否什么都不做。然后迭代下一个
                    wenjianjia.push(files[i]);
                }
                iterator(i+1);
            });
        })(0);
    });
    res.end();
});
server.listen(3000,"127.0.0.1");

结果:

H:\nodedemo>node 12.js
[ 'aaa', 'bbb' ]

11、静态资源管理
在nodedemo中创建一个static文件夹,static文件夹下添加1.html、index.html和404.html文件以及images文件夹,images文件下添加一张0.jpg图片。

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);
    console.log(extname);
    //真的去读取这个文件
    fs.readFile("./static/"+pathname,function(err,data){
        if(err){
            console.log(1);
            //r如果文件不存在404返回
            fs.readFile("./static/404.html",function(err,data){
                console.log(2);
                res.writeHead(404,{"Content-Type":"text/html;charset=UTF8"});
                res.end(data);
            });
            return; //不可少
        }
        //MIME类型就是 网页文件:txt/html.jpg文件:images/jpg
        var mine = getMinme(extname);
        res.writeHead(200,{"Content-Type":mine})
        res.end(data);
    });

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

function getMinme(extname){
    switch(extname){
        case ".html":{return "text/html";} break;
        case ".jpg":{return "image/jpg";} break;
        case ".css":{return "text/css";} break;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!