nodejs的一些基础操作

nodejs的安装
http://nodejs.cn/download/
尽量下载偶数的 稳定版 例12.0.0
奇数的是更新的 修正版
node -v 查看版本号v12.16.1 node Welcome to Node.js v12.16.1.
process 进程

NODEJS 不支持bom和dom
作用:写后台管理程序,与之类似php .net java
目标:数据服务,文件服务,web服务
优势:性能高,方便、入门难度低、大公司都在用(BAT)
劣势:

  • 服务器提供的相对较少
  • 相对其他语言,能用的上的学习资料少
  • 对程序员的要求高了

前后端交互流程
大后端
用户->地址httpl$]请求) ->web服务器(收到)-> nodejs处理请求(返回静态、动态)->请求数据库服务(返回结果)>nodejs(接收)>node渲染页面->浏览器(接收页面,完成最终渲染)
大前端
用户-> http[s]请求-> web服务器(收到)-> nodejs处理请求(返回静态、动态)->请求数据库服务(返回结果)->nodejs(接收)->返回给前端(渲染)->浏览器(接收页面,完成最终渲染)

ctrl+f 页面内搜索
下载nodemon npm i nodemon -g不用每次都退出操作才能刷新
运行代码 nodemon a.js

http模块
const http=require(‘http’);//导入http模块
const app=http.createServer((req,res)=>{//req请求 res返回,即下方大括号的内容
console.log(“前端访问我了…”)
//后端权重高
res.writeHead(200,{“Content-Type”:“text/html;charset=utf-8”})//支持中文编码
res.write(“你好”);
res.write(<!DOCTYPE html> //可以支持 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> 你好啊.</body> </html>)
res.end() //结束
})
app.listen(3000,“localhost”,()=>{ //监视3000端口
console.log(“server in runing… 正在监视”);
})

//资源托管
//1.引入相应的原生模块、依赖
let http = require(“http”)
let fs = require(“fs”)

//2.实例化http对象(服务器对象)
let app = http.createServer((req,res)=>{
//排除 /favicon.ico的请求
if(req.url.indexOf("/favicon.ico") === -1){
//需要判断要读取的是动态资源(接口api)还是静态资源
if(req.url.indexOf("/api") !== -1){ //处理接口
console.log(“处理/api开头的动态接口”,req.url)
}else{ //处理静态资源 /index.html
try {
let path = req.url === “/” ? “/index.html” : req.url;
let html = fs.readFileSync("./www"+path)
//直接将html结果返回给浏览器
res.write(html)
} catch (error) {
let html = fs.readFileSync("./www/nopage.html")
res.write(html)
}
}
}
res.end()
})
//监听服务器
app.listen(3000)

fs模块
let fs = require(“fs”) //导入fs模块

//1. fs.readFile(“地址”,“编码格式”,buffer流)
// fs.readFile(’./html/index.html’,“utf-8”,(err,data)=>{ //读取文件 异步
// console.log(“err”,err)
// console.log(“data”,data)//data默认二进制 文件内容
// })

//2. 如果报错,后续都不会执行 读取文件 同步
// let data=fs.readFileSync("./html/index.html")
// console.log(“data”,data);
// console.log(“我要成功了”);

//通过try-catch-finally语句块,使得后续代码正常执行
// try{
// let data=fs.readFileSync("./html/indexaa.html")
// console.log(“data”,data);
// }catch(e){
// console.log(“e”,e);
// }
// console.log(“我要成功了”);

//3. 改名
//fs.renameSync("./html/index.html","./html/about.html")
//fs.rename(“改前”,“改后”,err=>{})

//4. 删除
//fs.unlinkSync(’./html/about.html’)

url模块
let url = require(“url”)

//把url字符串转成Url对象
let str = “http://www.baidu.com:80/app/html/index.html?a=1&b=2#title”
let obj = url.parse(str,true)
// console.log(obj.query.a,obj.query.b)
//obj.query.a: a=1&b=2 obj.pathname: ./html/index.htm
//url.format(obj) ===> 可以将url对象转成url的字符串
console.log(url.format(obj))

// let obj = url.parse(str)
// let query = obj.query //“a=1&b=2”
// let queryArr = query.split("&") //[“a=1”,“b=2”]
// let json = {}
// for(var i=0;i<queryArr.length;i++){
// let arr = queryArr[i].split("=") //queryArr[0]=“a=1” queryArr[1]=“b=2”
// json[arr[0]] = arr[1]
// }
// console.log(json)

querystring模块
let querystring = require(“querystring”)
//处理查询字符串,地址栏的形式传参 querystring.parse(“a=1&b=2”)

let str = “a=1&b=2&c=3”
//str => obj 字符串转对象
// console.log(querystring.parse(str))
//obj => str 对象转字符串
//console.log(querystring.stringify({a:1,b:2}))

综合练习
//处理接口
//1.引入相应的原生模块、依赖
let http = require(“http”)
let fs = require(“fs”)
let url = require(“url”)
let querystring = require(“querystring”)
//2.实例化http对象(服务器对象)
let app = http.createServer((req,res)=>{
//排除 /favicon.ico的请求
if(req.url.indexOf("/favicon.ico") === -1){
//需要判断要读取的是动态资源(接口api)还是静态资源
if(req.url.indexOf("/api") !== -1){ //处理接口
//处理地址栏的数据
let urlObj = url.parse(req.url,true)
console.log(urlObj.query)
let noAddressData = “” //存放非地址栏的数据
req.on(“data”,chunk=>{ //chunk代表抓取的一片数据,data事件内部会频繁的触发
noAddressData += chunk
})
req.on(“end”,()=>{ //数据已经全部接受完毕
console.log(“非地址栏的数据:”,querystring.parse(noAddressData))
})
}else{ //处理静态资源 /index.html
try {
let path = req.url === “/” ? “/index.html” : req.url;
let html = fs.readFileSync("./www"+path)
res.write(html) //直接将html结果返回给浏览器
} catch (error) {
let html = fs.readFileSync("./www/nopage.html")
res.write(html)
}
}
}
res.end()
})

//监听服务器
app.listen(3000)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这货可能是个前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值