zoukankan      html  css  js  c++  java
  • node学习基础

    node特点

    js运行时,非阻塞I/O,事件循环

    模块导入导出

    模块化

    • 导入 require('./xxx')
    • module.exports=xxx
    index.js
    
    module.exports = {
      name: 'zhangsan',
      age: 12,
    }
    
    导出
    const a = require('./index');
    console.log(a);
    

    第二种

    index.js
    
    exports.msg = {
      name: 'zhangsan',
      age: 12,
    }
    
    导出
    const {msg} = require('./index');
    console.log(msg);
    

    FS 文件的操作

    const fs = require('fs');
    //同步
    fs.readFileSync
    //异步的
     fs.readFile('./index.js', (err, data) => {
      console.log(data);
     });
    //promise
      const {promisify} = require('util');
      const readFile = promisify(fs.readFile);
      readFile('./index.js').then(data=>{
        console.log(data);
      });
    //v10.0
    //fs promises API  实验的API(会报一个提示)
    const {promises} = require('fs');
    promises.readFile('./index.js').then(data => {
      console.log(data);
    });
    
    try{
      fs.access('./index.js') //找到这文件不报错,找不到就报错
    }catch (e) {
      console.log(e);
    }
    

    流的交互

    复制一个文件
    const fs = require('fs');
    const rs = fs.createReadStream('./index.js');
    const ws = fs.createWriteStream('./index1.js');
    rs.pipe(ws);
    

    HTTP协议

    http 是无状态的
    
    跨域
    域名协议端口不同
    > 代理服务器
    	proxy 代理
    	cors 跨域资源共享
             * res.setHeader('Access-Control-Allow-Origin','http://localhost:3000')
    

    CO

    解决promise问题的   * yield   next
    底层 express+koa中间件的原理
    

    基础

    global 可以直接访问global 并且没有window的概念 this(文件的打印)

    浏览器: window 代理了 global this=>window

    process 进程(当前运行的环境)

    Buffer 读取的内容 都是二进制

    process

    process.cwd()
    > 在哪执行文件,打印路径
    
    process.env()
    // webpack  开发环境(process.env.NODE_ENV)  生产环境
    
    process.argv()
    //命令行后面的 参数传入一个数组
    process.nextTick()
    

    node事件环

    微任务的概念 (promise.then   process.nextTick())
    timers  事件 setTimeout的回调
    poll  轮询 i/O 回调  fs.readFile()
    check  setInmediate 方法
    
    > 默认 会从上到下一次执行,如果代码执行到poll(轮询,I/O,回调,fs.readFIle) 发现check阶段没有
      那就在poll中等待时间到达后在清空代码
      
      setTimeout(()=>{
      console.log('timoute');
        });
        console.log('start');
        process.nextTick(()=>{
          console.log('nextTick');
          setTimeout(()=>{
            console.log('timeout2');
          })
        });
    结果start  nextTick timoute   timeout2
    
    setImmediate(()=>{
      console.log(1);
    });
    setTimeout(()=>{
      console.log(2);
    });
    //2  ,1
    
    let fs = require('fs');
    fs.readFile('./index.js','utf8',()=>{
      setTimeout(()=>{
        console.log('1');
      });
      setImmediate(()=>{
        console.log(2);
      })
    });
    //2 ,1
    

    切换队列,把队列清空,如果执行了很多个回调,超过了最大限制,也会切换队列

    poll 阶段下一个阶段是check 如果check队列中用东西 会先执行check

    事件环总结

    setTimeout(()=>{
        console.log("我先走一步") 
    })
    setTimeout(()=>{
        console.log("老司机,等等我")
    },10)
    setImmediate(()=>{
        console.log("你太慢了,我插个队")
    })
    setTimeout和setImmediate,触发的阶段不同,因此callback执行时间也不同。但是如果setTimeout的时间过长,那么系统会先执行setImmediate,然后等下一轮询中,如果setTimeout到时间了,那么就运行setTimeout的callbacks。
    /**
    output:
    我先走一步
    你太慢了,我插个队
    老司机,等等我
    */
    
    Promise.resolve().then(()=>{
      console.log("总有一日,我会上位")
    })
    process.nextTick(()=>{
      console.log("本宫始终是你望成莫及的")
    })
    虽然process.nextTick和Promise都是微任务,但是他们的执行的先后顺序是不一样的。无论谁的代码先执行,等到了poll阶段,两者都是可运行的状态时,都是nextTick先于Promise执行。
    

    global

    exports   module  require  __dirname    __filename
    node实现模块化(命名冲突,代码方便维护,方便协作)
    浏览器中实现模块化 var obj={a}  不能完全解决命名冲突
    //commonjs 规范 通过文件读取(utf8)  实现了模块化
    

    vm

    内置模块 模块 内置/核心 文件模块/自定义模块 第三方模块

    let vm=require('vm'); //node中执行字符串  可以采用vm
    //他可以提供一个沙箱环境,运行代码
    vm.runInThisContext('console.log(hello)');
    

    path

    处理文件路径

    path.join(__dirname,'a/b','d/c')  拼接起来
    __dirname 当前文件所在文件夹的路径
    __filename  当前文件的绝对路径
    

    #############..........................................................................................................................................................................................................................................................................................................................................................................................................................

  • 相关阅读:
    在ASP.NET GridView 中使用e.CommandArgument传递参数
    循环处理之while and do while
    MzTreeView(梅花雪)完全攻略
    FreeTextBox使用详解
    委托、线程的用法
    Master Theorem
    python jsonpath 语法总结
    python + zmail 邮件发送
    python的yaml语法
    unittest单元测试框架总结
  • 原文地址:https://www.cnblogs.com/fangdongdemao/p/10890098.html
Copyright © 2011-2022 走看看