zoukankan      html  css  js  c++  java
  • nodeIO,path,http , url模块

    关于IO理解

    IO:数据的传输

    input   输入   

    output  输出

    关于进程与线程,队列,线程池理解,参考我的另一篇博客:https://blog.csdn.net/qq_28835447/article/details/94121838

    异步的io操作和异步的非io操作理解:只要有数据的传输都是IO操作

    异步的IO操作

    <link rel="stylesheet" type="text/css" href="css/index.css"/>

    <img src= "./../img/img" />

    异步script 加载

    异步的非IO操作:

    settimeout  setIneterval

    同步异步的区别?
    同步会阻塞代码,异步不会阻塞代码   
    一条线程先执行同步的代码,主线程会调度线程池中的子线程去执行异步的代码,异步处理的结果什么时候完成什么时候再回到主线程中

    什么是并发

    一段时间内有多个程序在运行与运行完毕之间

     path模块

    __filename      当前的模块文件的绝对路径(符号链接会被解析)
    __dirname    有关当前模块的绝对路径目录名  相当于  path.dirname(__filename)
    const http = require('path') 
    path.basename(path)//文件名加后缀

    path.basename(path,'.后缀') //第二个参数指定去除的后缀名
    path.dirname(path)//仅仅只返回绝对路径中的文件路径部分,不包含文件

    path.extname(path)//返回文件后缀\a\b\c

    path.join('/a', "/b", "/c") //将给定的path片段拼接起来 \a\b\c

      path.join('..', '/a', '/b', '///c')    // ..\a\b\c
     
     path.join('/a', '/b', '///c', '..')    // \a\b  在最后加.. 则会返回上一级

      path.parse(__filename)     //将路径解析为对象   

    {

      root: 'C:\\',
      dir: 'C:\\Users\\Administrator\\Desktop\\node+MongoDB\\node\\02',
      base: '05.js',
      ext: '.js',
      name: '05'

    }

      path.isAbsolute('Desktop\\node\\02\\indasdfsdfex.html\\index.html') //判断是否为绝对路径
     
      path.format(path.parse(__filename))  //将路径对象转为路径字符串
     
      path.resolve('abc/efg/', './123/4566')  //resolve    返回 abc/efg/123/4566
      path.resolve('abc/efg/', '/123/4566')  //resolve    返回  c:/123/4566 
    //注意 path.resolve('/123/4566')只有一个参数时 , 将会被解析为根节点下的路径 ,   c:/123/4566 , 路径参数注意前面加 ./     
      path.resolve('./123/4566')  //resolve    返回 C:\Users\Administrator\Desktop\node+MongoDB\node\02\123\4566
     

    url模块

    let str = 'https://baidu.com:8080/p/a/t/h?id=1&name=美女';
    let url = require('url');
    console.log(url.parse(str, true));
    
    Url {
      protocol: 'https:',
      slashes: true,
      auth: null,
      host: 'baidu.com:8080',
      port: '8080',
      hostname: 'baidu.com',
      hash: null,
      search: '?id=1&name=美女',
      query: { id: '1', name: '美女' },
      pathname: '/p/a/t/h',
      path: '/p/a/t/h?id=1&name=美女',
      href: 'https://baidu.com:8080/p/a/t/h?id=1&name=美女' 
    }

    url.resolve('/one/two/three/', './four/') // '/one/two/three/four'   注意 后面的路径参数前面加上  ./   前面路径参数的后面加 / 否则 拼接路径会有问题

    http模块

    引入http模块搭建服务器

    const http = require('http')  //引入模块,用来提供服务

      const server = http.createServer();  //创建服务,用一个参数接受

       server.on('request',function(request,response){    //监听请求对应的请求和响应,监听request事件,当有请求发送的时候,都会触发request事件,触发完成就会去执行一个callback
       response.writeHead(200,{'content-type':"text/html;charset=utf8"});  //响应头,
       response.write('<h1>你好</h1>');     //必须现有writeHead  在用write
       response.end('world')  //结束,结束必须有,表示响应和请求已经结束

      console.log(request.httpVersion);//描述HTTP协议版本,通常是1.0或者1.1
      console.log(request.method) //描述HTTP请求方法,比如GET,POST,PUT,DELETE等
      console.log(request.url)  //描述原始的请求路径
    })

    server.listen(3000)  //监听端口

    request:请求对象形参

    response:响应对象形参

    response.writeHead(200,{'content-type':"text/html;charset=utf8"});  请求头,对应的文本,图片,JavaScript,css等都有与之对应

    例子:

    //引入模块
    const fs = require('fs')
    const http = require('http');
    const path = require('path');
    const querystring = require('querystring');
    const url = require('url');
    const server = http.createServer();//创建服务
    server.on('request',function(req,res){     //绑定请求事件
       let urlObj = url.parse(req.url,true);   //将请求地址转为对象
       let query = urlObj.query;               //请求参数
       let pathname = urlObj.pathname            //请求地址

    //接口文档的编写
    if (pathname == '/getData' && req.method == 'GET') { //当为GET请求时 res.end('0') } else if(pathname = '/index' && req.method == 'POST'){ //当为POST请求时 var data = ""; //作为容器 ,存储请求参数 req.on('data',function(chunk){ //绑定监听请求参数 console.log(chunk) //参数以buffer对象 data +=chunk }) req.on('end',function(){ //绑定请求结束时 let obj = querystring.parse(data); //将buffer对象打包为对象转为对象字符串形式 console.log(obj) res.end("1") }) } }) server.listen(3000);

    node简单搭建静态伺服

    //引入模块
    const http = require("http"); const fs = require("fs"); const url = require("url"); const path = require("path"); const querystring = require("querystring"); const server = http.createServer();
    //创建服务 server.on(
    'request',(req,res) =>{ let urlObj = url.parse(req.url,true) let query = urlObj.query; let pathname = urlObj.pathname; let query_uname = query.uname; //静态伺服部分 if(pathname == "/register.html" && req.method == "GET"){ fs.readFile("./src/register.html","utf8",(err,data) => { if(err){ res.end("404"); return; } res.writeHead(200,{'content-type':"text/html;charset=utf8"}); res.end(data); }) } else if(pathname == "/css/register.css" && req.method == "GET"){ fs.readFile("./src/css/register.css","utf8",(err,data) => { if(err){ res.end("404"); return; } res.writeHead(200,{'content-type':"text/css;charset=utf8"}); res.end(data); }) } else if(pathname == "/js/register.js" && req.method == "GET"){ fs.readFile("./src/js/register.js","utf8",(err,data) => { if(err){ res.end("404"); return; } res.writeHead(200,{'content-type':"text/javascript;charset=utf8"}); res.end(data); }) }

    })

    //监听端口
    server.listen(3000)

     

    封装写法

    const http = require("http");
    const fs = require("fs");
    const url = require("url");
    const path = require("path");
    const querystring = require("querystring");
    
    const server = http.createServer();
    
    server.on('request',(req,res) =>{
    
       let urlObj = url.parse(req.url,true)
       let query = urlObj.query;
       let pathname = urlObj.pathname;
       let query_uname = query.uname;
       //静态伺服封装
      function jintai(pathname,method){
        let getext = path.extname(pathname);  //文件后缀名
        if (method == 'GET') {
          if (getext == ".html") {
            getext = "";
          }
          if (getext == 'css' ||'js'||"jpg" ||"png" || "gif" ||"html") {
             fs.readFile("./src"+pathname,"utf8",(err,data) => {
              if(err){
                res.end("404");
                return;
              }
              res.writeHead(200,{'content-type':getExt(pathname)});
              res.end(data);
            })
          }
        } 
      }
       jintai(pathname,req.method)
    
       //兼容文件格式
      function getExt(pathname){
          var getext = path.extname(pathname);//文件的后缀名
          var ext = ''
          if(getext == "html"){
             ext = "text/html;charset=utf8"; 
          }
          if(getext == "css"){
             ext = "text/css;charset=utf8";
          }
          if(getext == "jpg"){
             ext = "text/jpg;charset=utf8";
          }
          if(getext == "png"){
             ext = "text/png;charset=utf8";
          }
          if(getext == "js"){
             ext = "text/javascript;charset=utf8";
          }
          if(getext == "gif"){
             ext = "text/gif;charset=utf8";
          }
          if(getext == "xml"){
             ext = "text/xml;charset=utf8";
          }
          return ext;
      }
    })
    server.listen(3000)
  • 相关阅读:
    javascript Ajax类
    C# 使注册表修改后立即生效
    MSSQL:创建临时表并赋值
    sql语句创建[表][列]带描述
    flash调用js中的方法,让js传递变量给flash (兼容 IE & FF)
    SQL中日期转换方法大全
    MSSQL:表变量的声明和赋值
    各种编程方面的CHM参考帮助手册(ADO参考手册、JavaScript参考手册、DHTML参考手册、TransactSQL参考手册、等等)
    vim命令的使用技巧
    Linux 如何启动mail邮件服务
  • 原文地址:https://www.cnblogs.com/wxyblog/p/11311328.html
Copyright © 2011-2022 走看看