昭山欢node资料学习笔记

以前学过一片node工作没有用,忘了,趁这个春节在整理一片

第一章

快速塔建一个局哉网服务器

const http = require("http");
var server = http.createServer(function(req,res){
console.log('ok0');
res.end()
});
server.listen(3000,"192.168.1.113")

返回一个json
res.write("{'A':10}");

设置响应头
res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"});
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
io 异步,凡是读文件的行为都会进入io操作,程序没有运行完被提前结束
示例1:
const http = require('http');
var server = http.createServer(function(a,b){
fs.readFile('./www'+req.url,function (err,data) {
if(err){
res.write(404)
}else{
res.write(data)
}
res.end()//res.end 放在这儿会读取完结束
})
//res.end().end()放在这儿文件还没有读完就执行到这儿了。提前终此程序
});
server.listen(80);
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
示例二:
凡是有读取文件的场所,都会进入io post发送也会当成数据段,
  现在举例做一个静态文件的实例
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
原理是读取文件,读出文件的后缀名,根据文件后缀名返回数据类型
读取后缀名方法; path包有extname方法,使用方法:
var extname = path.extname(pathname);

读到方件设置后缀名初步想法做法是:
假设一个函数是生成后缀名
mime = getMime(extname)
res.writeHead(200,{"Content-Type":mime});
如查涉及到读json 生成json 会现读取文件成了异步,还没有读文件的时候就会返回undefig 解决方法回调函数
完整示例如下:
var http = require('http');
var fs = require("fs");
var url= require("url");
path = require("path");
var server = http.createServer(function(req, res){
    var pathname = url.parse(req.url).pathname;
    if(pathname.indexOf(".")== -1){
        pathname += "/demo.html";
    }
    var fileUrl = "./" + path.normalize("./static/"+ pathname);
    var extname = path.extname(pathname);
    fs.readFile(fileUrl,function (err,data) {
        if(err){
            res.writeHead(404,{"Content-Type":"text/html;charset=UTF8"});
            res.end("404");
        }
        getMime(extname,function (mime) {
            res.writeHead(200,{"Content-Type":mime});
            console.log(mime);
            res.end(data);
        })


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

function getMime(extname,callback){
    fs.readFile("./mime.json",function (err,data) {
            if(err){
                throw Error("找不到mime.json");
                return "text/html;";
            }
            var mimeJSON = JSON.parse(data);
            var mime = mimeJSON[extname]||"text/plain"
            callback(mime);



})

}
View Code

上传文件实战
原理利用 formidable
第一步安装formidable npm i formidable

第一步。实例化一个对象,对象打点parse 时就可以外理文件了,需要先设置上传路径,form.uploadDir = "./uploads";
var form = new formidable.IncomingForm();
//设置文件上传存放地址
form.uploadDir = "./uploads";
//执行里面的回调函数的时候,表单已经全部接收完毕了。
form.parse(req, function(err, fields, files) {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
————————————————————————————————————————————————————————————————————————————————————————————————————————————
完整案例:
/**
 * Created by Danny on 2015/9/20 15:35.
 */
var http = require("http");
var formidable = require('formidable');
var util = require("util");
var fs = require("fs");
var sd = require("silly-datetime");
var path = require("path");


//创建服务器
var server = http.createServer(function(req,res){
    //如果你的访问地址是这个,并且请求类型是post
    if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
        //Creates a new incoming form.
        var form = new formidable.IncomingForm();
        //设置文件上传存放地址
        form.uploadDir = "./uploads";
        //执行里面的回调函数的时候,表单已经全部接收完毕了。
        form.parse(req, function(err, fields, files) {
            //if(err){
            //    throw err;
            //}
            //console.log(util.inspect({fields: fields, files: files}));

            //时间,使用了第三方模块,silly-datetime
            var ttt = sd.format(new Date(), 'YYYYMMDDHHmmss');
            var ran = parseInt(Math.random() * 89999 + 10000);
            var extname = path.extname(files.tupian.name);
            //执行改名
            var oldpath = __dirname + "/" + files.tupian.path;
            //新的路径由三个部分组成:时间戳、随机数、拓展名
            var newpath = __dirname + "/uploads/" + ttt + ran + extname;

            //改名
            fs.rename(oldpath,newpath,function(err){
                if(err){
                    throw Error("改名失败");
                }
                res.writeHead(200, {'content-type': 'text/plain'});
                res.end("成功");
            });
        });
    }else if(req.url == "/"){
        //呈递form.html页面
        fs.readFile("./form.html",function(err,data){
            res.writeHead(200, {'content-type': 'text/html'});
            res.end(data);
        })
    }else{
        res.writeHead(404, {'content-type': 'text/html'});
        res.end("404");
    }
});

server.listen(80,"192.168.41.36");
View Code

 ejs 模板使用案例

//加载模板

var ejs = require("ejs");
// 产生模板

var str = "vvvvvvvvvvvvvvvvvvvvvvvv<%= a %>";
// 数据对象
var data = {
a : 6
};
//调用render 学渲染
var html = ejs.render(str,data);
console.log(html);
console.log("ok");
————————————————————————————————————————————————————————————————————————
完整示例:如下
var ejs = require("ejs");
var fs = require("fs");
var http = require("http");
var server = http.createServer(function (req,res) {
    fs.readFile("./static/hhh.ejs",function (err,data) {
        var template = data.toString()
        var dictionary = {a:6};
        var html = ejs.render(template,dictionary);
        res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"});

        console.log(html)
        res.end(html);

    })
});
server.listen(80,"127.0.0.1")
View Code

 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


处理get 请求通常用url 模块
下面示例原理:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

var http = require('http');
//本功能示例演示get请求处理,原理是从:?分割 然后&在分,
// 然后利用obj[xx]=?方式增加在到对象
http.createServer(function(req,res){
var GET={};
if(req.url.indexOf('?')!= -1){
var arr = req.url.split('?');
var url = arr[0];
var arr2 = arr[1].split('&');
for(var i=0;i<arr2.length;i++){
//
var arr3 = arr2[i].split('=');
GET[arr[0]]=arr[1];
//类似于这样 get[a]=12
}
}
console.log(GET)

res.end();

}).listen(80,"127.0.0.1");
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
处理post 请求原理,通过数据段  += 将数据垒加在一起
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
示例代码!!!
var http = require('http');
http.createServer(function (req,res) {
var str="";
req.on('data',function (data) {
str +=data;
})
req.on('end',function(){
console.log(str)
});
res.end();

}).listen(80);




原文地址:https://www.cnblogs.com/fgxwan/p/12253991.html