node

开发依赖

  1. --save-dev表示开发过程中的依赖(glup),线上运行并不需要使用

  2. npm install --production 安装所有的项目依赖

  3. npm init -y 自动生成package.json文件

node

node:一个代码运行环境,全局对象是globol

通过node ”./路径名“在cmd上运行代码

系统fs文件操作

1、读取文件
//通过模块的名字fs对模块进行引用
const fs = require('fs')
fs.readFile("文件路径","utf-8",(err,doc)=>{
  //如果文件读取发生错误,参数err的值为错误对象,否则err的值为null
  //doc:文件内容
   if(err == null){
       console.log(doc)
  }
})
2、写入文件内容
const fs = require('fs')
fs.writeFile('./demo.txt','写 入文件的内容',err=>{
if(err!=null){
  console.log(err),
       return
}
console.log('文件写入成功')
})
3、路径拼接语法
//导入path模块
const path = require('path')
//对路径进行拼接
let finialPath = path.join('itcast','a','c.css')
//输出结果为itcast/a/c.css
console.log(finialPath)
4、绝对路径的修改
const fs = require('fs')
const path = require('path')
fs.readFile(path.join(__dirname,'01.helloworld.js'),'utf8',(err,doc)=>{
   console.log(err)
   console.log(doc)
})

第三方模块|ctrl+c终止终端操作

npm install formidable
npm uninstall formidable
//nodemon可以使得文件修改后也可以在控制台(cmd)同步修改
npm install nodemon -g 全局安装nodemon
nodemon + 文件名 //操作文件

服务器

  1. 通过req.headers获取请求报文对象,一般会用到req.headers["accept"]

  2. 响应报文(请求成功):res.writeHead(200,{ 'content-type':'text/html;charset=utf8'})

  3. 响应报文(重定向): res.writeHead(301,{Location: '/list'})

创建web服务器

const http =require('http');  //引入系统模块
const url = require('url');   //获取完整地址
const app = http.createServer();//创建web服务器
//监听客户端发送请求 req:请求对象,res:响应对象
app.on('request',(req,res)=>{
req.headers//请求报文
   res.end('<h1>相应内容</h1>')  //提示响应完成
});
//监听3000端口
app.listen(3000)

GET&POST

GET:获取数据, 参数在req.url中获取

POST:添加/发送数据,更加 安全,参数通过data和end事件接受的

get请求数据
const url = require('url');   //通过url.parse方法处理请求地址
let {pathname,query} = url.parse(req.url,ture)
post请求数据
const querystring = require('querystring')
let postParams = ''
req.on('data',params=>{ //params参数中保存了post的url数据
   postParams += params
})
req.on('end',()=>{
   let query = querystring.parse(postParams)
})
res.end('ok')//发送完成报文

req.method

  //req.method获取请求方式
 if(req.method == 'GET'){
   res.end('get')
}else if(req.method == 'POST'){
   res.end('post')
}

req.url

  //req.url获取请求地址,返回默认'/'
 if(pathname == '/index' ||req.url == '/'){
   res.end('<h2>欢迎你</h2>home')
}else if(pathname == '/list'){
   res.end('list')
}else{
   res.end('not found')
}

异步

异步代码只有通过参数(回调函数)获取返回值

async

  1. 普通函数定义前加上async关键字就成了异步函数

  2. 异步函数返回值是一个promise对象,

  3. async中的return的参数就是promise中的resolve,throw就是reject

//const fn = async ()=>{}; 
async function fn(){
   throw '这是原本reject的err'
   return '这是原本resolve的data'
}
fn().then(res=>{
 console.log(res);
}).catch(err=>{
 console.log(err);
})

await

  1. await关键字只能出现在异步函数

  2. await后边只能promise对象

  3. await只能等promise返回结果后才能只能下一个异步任务(使异步变同步依次执行)

async function fn1() {  
 return 11
}
async function fn2() {  
 return 22
}
async function fn3() {  
 return 33
}
async function run() {  
 let p1 = await fn1()
 let p2 = await fn2()
 let p3 = await fn3()
 console.log(p1,p2,p3);
}
run()

服务器端

  1. ip地址:互联网中设备的唯一标识 (192.168.1.1)

  2. 域名:因为ip地址太难记出现的产物,上网使用的地址(http://127.0.0.1

  3. 端口:不同的端口号为服务器提供不同的服务(80)

路由|静态资源

获取路由对象

调用路由对象创建路由

启用路由

//引入路由模块/静态资源
const getRouter = require('router')
const serveStatic = require('serve-static')
//获取路由对象
const router = getRouter()
//创建静态资源方法,需要指定访问目录
const serve = serveStatic('public绝对路径')
router.get('/add',(req,res)=>{
   res.end('hello wordl')
})
//当客户端访问服务器时
app.on('request',(req,res)=>{
   router(req,res,()=>{})
   serve(req,res,()=>{})
})

stream流

文件写入流 fs

createWriteStream

let ws = fs.createWriteStream('./test_dir/a.tex',{encoding:'utf-8'})
ws.on('open',(data)=>{
   console.log('open事件开始',data);
})
ws.on('ready',(err)=>{
   console.log('ready',err);
})
//ws.end后调用
ws.on('close',(err)=>{
   console.log('close',err);
})
//批次写入
ws.write('hello text!',(err)=>{
   if(err){
       console.log(err);
  }else{
       console.log('写入成功');
  }
})
//批次写入
ws.write('hello text!',(err)=>{
   if(err){
       console.log(err);
  }else{
       console.log('写入成功');
  }
})
ws.end()

批次写入语法糖rs.pipe(ws)

createReadStream

let rs = fs.createReadStream('./test_dir/dy.mp4',{flags:'r'})
let ws = fs.createWriteStream('./test_dir/dy_copy.mp4')

rs.on('open',(data)=>{
   console.log(data);
})
//批次读取
rs.on('data',function (chunk) {
   //批次写入
   ws.write(chunk,(err)=>{
       console.log(err);
  })
   console.log(d,d.length);
})

http协议

 

posted @ 2020-11-04 15:25  良荣十贰  阅读(455)  评论(0)    收藏  举报