Node Js
定义
Node Js 是一个运行在服务器端的JavaScript。基于一个Chrome JavaScipt 运行时建立的一个平台
特点
- 事件驱动I/O服务端
- 基于V8引擎
- 速度快,性能好
- node -v 查看node js 版本号
- 使用common js 规范
Node使用方式
- REPL 交互模式 在当前目录的cmd当中输入node
- 退出交互模式 .exit
- 或者node 直接打开文件
- 采用require() 方法引入要使用的模块
- 采用 module.exports 导出文件
- 声明全局变量时,使用全局对象 global
Tip: 使用导出文件的注意事项
- exports 默认指向 module.exports 导出作用只有module.exports才拥有。但是如果exports指向了新对象,那么就没有导出作用
// 第一种 module.exports = { a:a, b:b } //第二种 不推荐使用 module.exports.a=a module.exports.b=b //第三种 exports.a = a exports.b = b
- 我们可以使用解构赋值来读取变量
- 引用传递 深浅拷贝
let obj = { a:1, b:2 } let obj2 = obj obj2.a = "lisi" //该表obj2 会影响到obj console.log(obj2) // {a:lisi,b:2} console.log(obj) // {a:lisi,b:2} //利用解构赋值来进行浅拷贝 let obj3 = { ...obj } let obj4 = Object.assign({}, obj)
- node js 采用 common js 规范
- 包管理的配置文件 npm init -y 或者 yarn 根据package.json重新下载依赖
- 下载新的配置文件yarn add 或者 npm i
Node 内置模块
http 模块
定义
服务器模块
使用方法
- 引入内置对象 http
- 创建一个服务器
- 解决中文乱码 响应头
- 响应结束 end () end里面只能传字符串类型的数据且只能有一个
- 安排监听接口
const http = require("http"); const chalk = require("chalk") //改变在服务器中输出的颜色 let ser = http.createServer((req,res)=> { res.writeHead(200,{"Content-type":"text/html;charset=utf-8"}) res.end("hello,world") }) ser.listen(3000, ()=> { console.log(123) })
fs 模块
定义
读写文件
使用方法
- 引入fs模块
- 读取写入文件时候 ./ 必须写 路径必须写全
读取文件方式
同步读取
let str = fs.readFileSync("./a.txt","uft-8")
异步读取
//异步读取的回调函数错误优先 fs.readFile("./a.txt","uft-8",(err,data)=> { if(!err){ console.log(data) } })
写入文件方式
同步写入
// 写入文件 fs.writeFileSync("./a.txt","rush b ","utf-8") // 追加内容 fs.appendFileSync("./a.txt","今夜","utf-8") // 可以创建一个文件 fs.writeFileSync("./b.txt","cccc","utf-8")
异步写入
fs.writeFile("./b.txt","这是异步","utf-8",(err,data)=> { if(!err){ console.log(data) } })
流方式
读取流
//读取流 let ws = fs.createReadStream("./a.txt") let str = '' //监听数据事件 ws.on("data",(thunk)=> { str += thunk }) //数据传输完成 ws.on("end",()=> { console.log(str) })
写入流
let ws = fs.createWriteStream("./a.txt"); //写入内容 ws.write("xiaolaji","utf-8")
复制一个文件
const fs = require("fs"); var rs = fs.createReadStream("./a.txt"); var ws = fs.createWriteStream("./acopy.txt"); //把rs的内容赋值到ws当中 rs.pipe(ws);
创建一个服务器
先引入内置对象http
然后创建一个服务器,req是请求,res是响应
响应头
响应结束 end
安排监听接口
注意:res.end() 里面只能传字符串类型的数据,且只能有一个
const http = require("http"); const chalk = require("chalk") let ser = http.createServer((req,res)=> { res.writeHead(200,{"Content-type":"text/html;charset=utf-8"}) res.end("hello,world") }) ser.listen(3000, ()=> { console.log(123) })
path内置模块
path.join 与 path.resolve 的区别
path.join() 将多个参数字符串拼接起来合成一个路径字符串
path.resolve() 以程序为根目录作为起点,根据参数解析出来一个绝对路径
__dirname 当前目录的绝对路径
__filename 当前文件的绝对路径
path.extname 获取当前文件的扩展名
url内置模块
url.parse()方法 用于将url地址转换为一个对象
url.format() 将一个url对象转换为字符串
使用方法
const express = require("express") const url = require("url") const router = express.Router() router.get("/hello",(req,res,next)=>{ //第二个参数可以将query我们请求的?后面的参数转换为一个对象 在这个例子当中我们是这样访问的 /hello?n=1 let obj = url.parse(req.url,true) if(obj.query.n ==1){ next() }else{ res.send("hello world") } })
express框架
简介
一个基于node js 的极简web框架 同种类的有 koa2 eggs adonis js
快速入门
下载express
yarn add express
核心概念:中间件(middlware)
可以拦截我们的请求,是一些先存在的函数,可以替我们完成很多工作。
存在于请求和响应中间
手写路由
- 路由有级中间件,应用级中间件 两种
//第一步 引入express模块 const express = require("express") //第二步 实例化 let app = express() //使用 static中间件 读取静态资源 默认读取public目录下的index.html文件 app.use(express.static(path.join(__dirname,'public'))) //第三步 模拟请求 app.get("/hello",(req,res)=> { res.send("hello world") }) //如果请求不存在的接口我们可以使用通配符来读取这个请求 app.get("*",(res,req)=>{ res.send("404 NotFound! 该页面不存在") }) //第四步 启动端口 app.listen(3000,()=>{ console.log("listen 3000....") })
把我们的请求放在一个文件当中就形成了路由
- 新建一个
const express = require("express") let router = express.Router() router.get("/hello",(req,res,next)=> { res.send("hello world1") //如果存在请求路径相同的情况 会被第一个拦截 如果写next就可以访问第二个 next() }) router.get("/hello",(req,res)=> { res.send("hello world2") }) router.get("*",(res,req)=>{ res.send("404 NotFound! 该页面不存在") }) module.exports = router
实际结构
文件结构
应用级中间件 根目录当中的index.js
路由级中间件
APIDOC
可以根据注释 生成一个接口文档
来源:https://www.cnblogs.com/Rembang/p/12163707.html