• 昭山欢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);




  • 相关阅读:
    TCP 协议三次握手过程解析带实例
    一些关于反汇编与逆向方面的博文分享
    关于mwArray和一般数组的区别
    vc6.0 使用Ado 连接MS-SqlServer2000 连接字符串
    VC6使用技巧
    Oracle性能诊断艺术-读书笔记(执行计划中显示 Starts, E-Rows, REM A-Rows and A-Time)等)
    Oracle性能诊断艺术-读书笔记
    linux 检查补丁包是否安装 名称 版本 release号
    我叫他小北
    Oracle linux安装Oracle 11G
  • 原文地址:https://www.cnblogs.com/fgxwan/p/12253991.html
Copyright © 2020-2023  润新知