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 当前文件的绝对路径

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

node学习基础的更多相关文章

  1. Node学习基础之安装node以及配置环境变量

    第一步去node官网下载nodejs 我放在D盘 接着在cmd输入node -v 就能得到node的版本号 还有npm -v 下来进入安装好的目录 nodejs目录 创建两个文件夹 node_cach ...

  2. node.js基础模块http、网页分析工具cherrio实现爬虫

    node.js基础模块http.网页分析工具cherrio实现爬虫 一.前言      说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherri ...

  3. 将js进行到底:node学习笔记1

    废话:自高中以来一直对编程充满激情,磨剑五年,如今要毕业了,我不想用我已经擅长的知识敷衍,而想以一个全新的领域去面向我的毕设--是时候学习一下node.js node.js基础 对于JavaScrip ...

  4. NodeJs>------->>第三章:Node.js基础知识

    第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info  方法 console.log(" node app1.js 1> ...

  5. 进击Node.js基础(二)

    一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...

  6. Node学习图文教程之express重写留言本案例

    写在前面 小伙伴们大家好,我是你们的pubdreamcc,接着前面的学习,这篇博文出至于我的GitHub仓库:Node学习教程资料,如果你觉得对你有帮助,欢迎star,你们的点赞是我持续更新的动力,谢 ...

  7. 将js进行到底:node学习1

    废话:自高中以来一直对编程充满激情,磨剑五年,如今要毕业了,我不想用我已经擅长的知识敷衍,而想以一个全新的领域去面向我的毕设--是时候学习一下node.js node.js基础 对于JavaScrip ...

  8. 现代3D图形编程学习-基础简介(2) (译)

    本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...

  9. 现代3D图形编程学习-基础简介(1) (译)

    本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...

随机推荐

  1. 离散数学交并补运算、差运算、异或运算的实现--biaobiao88

    对集合的交并补运算.差运算及异或运算的代码,可输入字符与数字,内容简单,详情请看以下代码 #include<iostream> using namespace std; int main( ...

  2. Python基础12

    jupyter notebook 快捷键 ”Ctrl + / ” 快速注释/撤销注释.注释整行或者整段代码.

  3. HeadFirst设计模式(一)策略者模式

    最近在看HeadFirst设计模式一书,作为一个半路出家的程序员,感觉很多东西需要学习,学习的路程中有些东西学了当时觉得理解了,但日常工作中没有使用到渐渐的自己就忘记了.--------------- ...

  4. SQL Server Compact 3.5环境部署<转>

    通过使用 Microsoft Visual Studio 开发环境,可以开发使用 SQL Server Compact 3.5 的应用程序.Visual Studio 是开发和部署使用 SQL Ser ...

  5. oracle OCCI编程

    1. 创建OCCI环境变量 Environment *env = Environment::createEnvironment(); Environment对象的建立必须放在第一位,而且也必须是最后一 ...

  6. rac启动维护笔记

    Ohasd.bin将产生4个代理启动相关的资源 (1)    oraagent:负责ora.asm.ora.evmd.ora.gipcd.ora.gpnpd.ora.mdnsd的启动和管理 (2)   ...

  7. php超时时间说明【转】

    一,http请求超时时间 可能出现的场景: 1,curl进程运行了一个世纪还木结束,curl的时候设置了超时时间 --connect-timeout 1000 2,operation timed ou ...

  8. Odoo form视图详解

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826350.html 一:Header头部 header区域一般用于展示文档流转的阶段和生命周期,以及动作 ...

  9. Linux磁盘查询指令

    磁盘情况查询: 查询系统整体磁盘使用情况: df -h 查询指定目录的磁盘占用情况 du -h /目录 查询指定目录的磁盘占用情况,默认为当前目录 -s  指定目录占用大小汇总 -h 带计量单位 -a ...

  10. Nginx 高级配置-压缩功能

    Nginx 高级配置-压缩功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx压缩相关参数概述 1>.gzip on | off; Nginx支持对指定类型的文 ...