Node.js是一个基于Chrome V8引擎的JavaScript运行。
js的运行环境
运行js有两种:
.js文件方式
交互(REPL):
node 回车进入交互模式
.exit 退出交互模式
模块化: 作用 复用 解决命名冲突
module
一个js文件就是一个模块 模块之间互不影响
global是nodejs里面的全局对象
例如:global.a=a;
引入模块 var a = require(模块的路径)
导出模块 module.exports =a;
导出多个变量的时候可以写成对象的模式
exports 默认指向module.exports
如果exports指向了新的对象,那么就没有了导出的效果
浅拷贝
var obj ={ ...obj} //浅拷贝(es6)
var obj2 = Object.assign({},obj); //浅拷贝(es5)
浅拷贝解决了对象引用时候互相影响的问题,采用浅拷贝的时候就不再会影响原来的对象。
补充:
node.js采用commonjs规范
.json也是一个单独的模块
相当于四个空格
换行
引入模块如果省略扩展名 是按照 .js .json .node 的顺序引入的
npm 看文档说明
npm init -y 会产生package.json包管理文件 里面的script标签对象 , npm run +key值运行,可以用来自定义命令。
npm i 或者 yarn命令会根据package.json重新下载node_modules文件
模块的分类:
1.自定义模块
2.内置模块:(类比手机自带的软件不用下载)
①http、https(面试题:http和https的区别)
//引入内置的http模块 const http = require("http"); //引入第三方模块 第三方下载 npm install 卸载 uninstall / yarn add 卸载remove const chalk = require("chalk"); //创建一个http服务器 var ser = http.createServer((req,res)=>{ //响应头里写入编码问题 响应的writeHead的方法响应头 res.writeHead(200,{'Content-type':'text/html;charset=utf-8'}) res.end("hello,dd冬冬"); //end方法返回一个消息 }) //这个服务器监听到3000端口 console.log(chalk) ser.listen(3000,()=>{ console.log(chalk.green("listen 3000....")) })
②fs文件操作模块(内置模块)
同步sync 读写文件 :fs.readFileSync("文件的路径","utf-8") fs.writeFileSync("文件的路径","内容","utf-8") fs.appendFileSync("文件的路径","追加的内容",utf-8")
//同步读文件 // var str =fs.readFileSync("./a.txt","utf-8"); // console.log(str); // 异步读取文件 // fs.readFile("a.txt","utf-8",(err,data)=>{ // if(!err){ // console.log(data) // } // }) // 流的方法读取文件 var rs =fs.createReadStream("./a.txt"); var str =""; rs.on("data",(thunk)=>{//读取一块内容的时候,就发送data事件 str += thunk; }) rs.on("end",()=>{//当读取完所有数据的时候,就发生end事件 console.log(str); })
异步async读写文件:fs.readFile("文件的路径","utf-8",(err,data)=>{if(!err){ data就是读出的内容}}) fs.writeFile("文件的路径","写入的内容" ,"utf-8",callback) fs.appendFile ("文件的路径","写入的内容" ,"utf-8",callback)
const fs =require("fs"); //同步写入文件 // fs.writeFileSync("./a.txt","冬冬","utf-8"); // 异步写入文件 // fs.writeFile("./a.txt","篮球","utf-8",(err)=>{ // if (!err) { // console.log("write ok"); // } // }) //流的方式写入文件 var ws =fs.createWriteStream("./a.txt"); ws.write("你好呀","utf-8");
const fs =require("fs"); // 同步追加写入 // fs.appendFileSync("./a.txt","啊哈哈","utf-8"); // 异步追加写入 fs.appendFile("./a.txt","章冬冬","utf-8",(err)=>{ if(!err){ console.log("write ok"); } });
流stream:
fs.createReadStream:
fs.createReadStream
fs.on("data",(thunk)=>{}) fs.on("end",()=>{})
fs.createWriteStream:
fs.createWriteStream
ws.write("文件的内容","utf-8")
拷贝(copy)pipe 管道
rs.pipe(ws) 文件的拷贝
const fs =require("fs"); var rs =fs.createReadStream("./a.txt"); var ws =fs.createWriteStream("./acopy.txt") rs.pipe(ws);//rs通过管道传输给ws
fs.renameSync 重命名
3.第三方模块:(类比手机里要下载后再使用的软件)