node.js

控制台常用指令

在某个文件夹下路径上输入cmd,就会在当前的路径下运行cmd.exe
node xxx.js文件 //用node环境去运行js文件
cls //清除控制台屏幕上的打印信息
ctrl+c //停止程序运行
上下键//输入过的指令历史

模块一:http模块

 var app=http.createServer((req,res)=>{}) 创建一个服务器
 app.listen(81) //端口的意义:ip是访问计算机的标志  端口就可以进入计算机的具体哪一个
 程序

 res.setHeader( ' Content-Type ' , 'text/plain; charset=utf8 ')//设置编码和数据包格式

 res.write("<a>xxx</a>")//可以多次调用 代表给前端传输数据
 res.end()//可以传输数据也可以不传输,它是当前这一次网络请求结束的标志,一旦执行了就
 断开连接
 req.url 前端给后端发送网络请求的网址"http://ip:port"后面的部分字符串
 解析url来做出不同页面的网址  和不同参数传不同数据网址

路径

__dirname

  • 全局变量 __dirname是一个字符串,代表当前js文件所在的目录的路径(绝对路径)

__filename

  • 全局变量 __filename是一个字符串,代表当前js文件的路径(绝对路径)
//引入官方的http模块
var http=require("http")
//创建一个服务器
var app=http.createServer((req,res)=>{
  //判断用户输入的网址
  if(req.url=="/hqyj"){
    //设置数据的头部信息为html文本文档,编码为utf8
    res.setHeader( ' Content-Type ' , 'text/plain; charset=utf8 ')
    //持续写入数据包中
    res.write("<h1>欢迎来到1</h1>")
    res.write("<h1>欢迎来到2</h1>")
    //最后一次写入数据包,并断开连接
    res.end("<h2>华清远见</h2>")
  }
})
//监听端口
app.listen(8081) 

//用户浏览器地址栏输入:http://服务器电脑的ip:8081/hqyj  每当用户访问一次,
后端的那个回调函数就会执行一次

 http协议:基于请求和响应的模式,如果服务器响应完毕,客户端与服务器断开连接,下次请求
 需要重新发起请求,http是典型的短连接
createServer分两部分:
1.创建server
2.设置监听
req(requet对象)--请求对象
    请求头/请求体
    请求头:请求头很短,包含本次请求的基本信息
    常用的req对象属性:
    url--当前请求的路径和参数
    method--当前请求的方式
    请求体:当POST请求时,数据会存放在请求体里传送到后台,但是因为数据会很大,node不
会依次传递完毕,会分段传递,所以我们需要监听两个事件保证数据获取的完整性和准确性
    data--每当有一段数据传递过来时,data事件都会触发
    end--当最后一段数据传递完毕时,end事件会触发
res(response对象)--响应对象
    响应头/响应体
    响应头:存储本次响应给前端数据的配置信息,如文件格式,编码格式等
    res.writeHeader(响应码, {配置信息});第二个参数苏也可以不写.系统也会自动加一个,但
 是值是默认值
    响应体:决定后台向前端返回什么
    res.write()--可以写多次,也可以不写
    res.end()--必须写,作用是结束本次响应,如果不写,前端会一直等待后台响应

模块二:fs模块

fs.readFile(path,(err,data)=>{})
path 填路径 可以绝对可以相对  
err代表读取失败
data代表读取成功  它是一个buffer类型的数据(二进制数据流) 可以通过toString()转化为字
符串
注意:res.end()方法接受 字符串或者buffer

====写入文件(创建文件)
fs.writeFile(path ,data,callback(er))
如果文件存在,该方法写入的内容会覆盖旧的文件内容,不存在就创建一个新的
path - 文件路径
data - 要写入文件的数据,可以是 String(字符串) 
callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

====删除文件
fs.unlink(path,callback(err))
path - 文件路径。
callback(err) - 删除回调函数,err错误信息

====以追加方式写文件
fs.appendFile(__dirname + '/test.txt', '我会追加到文件内容的末尾', function (er) {
  console.log('追加内容完成');
})


====创建目录 
fs.mkdir(__dirname + '/test', function (err) {
  if(err)  throw err
  console.log('创建目录成功')
})


====移动/重命名文件或目录:整个功能相当于重命名一个文件/文件夹路径
fs.rename(oldPath, newPath, callback);
oldPath, 原目录/文件的完整路径及名;
newPath, 新目录/文件的完整路径及名;如果新路径与原路径相同,而只文件名不同,则
是重命名
callback(err), 操作完成回调函数;err操作失败对象
移动文件有一个bug:新路径和旧路径必须是同一个根盘


====拷贝文件
fs.copy(oldPath, newPath, callback);
oldPath, 原文件的完整路径;
newPath, 新文件的完整路径;
callback(err), 操作完成回调函数;err操作失败对象
拷贝文件以后两个文件都会存在磁盘中 


//引入官方的http模块
var http = require("http")
// 创建一个服务器
var fs = require("fs")
var app = http.createServer((req, res) => {
    // 每有一次网络请求 这个回调函数调用一次
    fs.readFile("./aa.html", (err, data) => {
        // 不管读取超过与否这个回调函数都会执行
        if (!err) {
            res.end()
        } else {
            console.log("读取失败");
        }
    })
})

模块三:url模块

可以把url网址解析为一个对象
var urlobj=url.parse(req.url)
urlobj.pathname
urlobj.query

网址的组成: 协议 域名 pathname querystring hash
域名 ==>DNS解析 会把域名解析为一个ip port

把url网址解析为一个对象

var url = require("url")
var str = "http://www.hqyj.com/20220728/news/page1/index.html?count=20&maxid=123456"
var obj = url.parse(str)
console.log(obj)

结果:解析成对象
在这里插入图片描述

url为/的情况

var http = require("http")
var fs = require("fs")
var url = require("url")
var app = http.createServer((req, res) => {
	//req.url是什么?
	//前端发送给后端的网址
	//为什么要打印req.url?
	console.log(req.url)
	var path = url.parse(req.url).pathname //"/b.txt"	
	if (path == "/") {
	//解决方法:更改path 在读取文件是进行拼接
		path = "/b/index.html"
	}
	// 当输入的网址是192.168.6.102:8081这种 此时传给后台的url就是 / 
	fs.readFile(__dirname + "/src" + path, (err, data) => {
		if (err) {
			res.end("not found")
		} else {
			res.end(data)
		}
	})
})
app.listen(8081)

模块四:querystring模块

可以把querystring参数解析为一个对象
var urlobj=url.parse(req.url)
var queryobj=querystring.parse(urlobj.query)
var str=querystrin.stingify({name:“fasc”,age:22})

解析成对象

var querystring = require("querystring")
var obj = querystring.parse("username=jack&count=20&maxid=123456")
console.log(obj)

结果:
在这里插入图片描述

解析成字符串

var querystring = require("querystring")
var str2 = querystring.stringify({
    name: "jack",
    age: 20
})
var str3 = JSON.stringify({
    name: "jack",
    age: 20
})
console.log(str2, 111111111111, str3)

结果:
在这里插入图片描述

模块五:mime模块

识别文件的类型

var mime = require("mime")
var re = mime.getExtension("text/css")
console.log(re)
var re2 = mime.getType("htpp://2342354345:8080/css/sadfsdgfdfg.ttf")
console.log(re2)

在这里插入图片描述

应用

var mime = require("mime")
var url = require("url")
var querystring = require("querystring")
var http = require("http")
var fs = require("fs")

var app = http.createServer((req, res) => {
	let urlobj = url.parse(req.url)
	let pathname = urlobj.pathname//1
	if (pathname == "/") {
		pathname = "/index.html"
	}
	let path = __dirname + "/src" + pathname//2
	console.log(111111111111, path)
	fs.readFile(path, (err, data) => {
		if (!err) {
			let type1 = mime.getType(path)//3
			res.setHeader("content-Type", type1)//4
			res.end(data)
		} 
	})
})
app.listen(8080)

__dirname、__filename

  • 全局变量 __dirname是一个字符串,代表当前js文件所在的目录的路径(绝对路径)
  • 全局变量 __filename是一个字符串,代表当前js文件的路径(绝对路径)

6、相对、绝对路径

/*
本地相对路径
  在这个页面中写路径: file://x1/x2/x2/index.html  
"./src/18.jpg"  写这个路径的文件的页面是在本地打开的==> file://x1/x2/x2/src/18.jpg
"src/18.jpg" 写这个路径的文件的页面是在本地打开的 ==> file://x1/x2/x2/src/18.jpg
"file://c:/"


本地绝对路径
从根盘符开始写路径
"C:/Users/Administrator/Desktop/xxcy/index.html"



相对网络路径
当前页面的网址:  "协议://ip:port /src/news/index.html  querystring hash"
页面内部的路径:
 "./src/18.jpg" ==> "协议://ip:port /src/news/src/18.jpg"
"src/18.jpg" ==> "协议://ip:port /src/news/src/18.jpg"

思考1:
用户输入网址: 
"http://192.168.6.60:8080/user/20220728/newspage.html?n=20" 
打开了一个页面,在这个页面中有一个img的src是 : "./src/18.jpg"
请问192.168.6.60:8080这个服务器会受到req.url是什么?
答: "/user/20220728/src/18.jpg"

思考2:
用户输入网址: 
"http://192.168.6.60:8080/user/20220728/newspage" 
打开了一个页面,在这个页面中有一个img的src是 : "./src/18.jpg"
请问192.168.6.60:8080这个服务器会受到req.url是什么?
答: "/user/20220728/src/18.jpg"
它真正的网址:"http://192.168.6.60:8080/user/20220728/src/18.jpg"



绝对网络路径
"协议://ip:port /src/news/src/18.jpg"
易错思考:
用户输入网址: http://192.168.6.60:8080/user/20220728/newspage
打开了一个页面,在这个页面中有一个img的src是 : "192.168.6.60:8080/src/18.jpg"
请问192.168.6.60:8080这个服务器会受到req.url是什么?
答: "/user/20220728/192.168.6.60:8080/src/18.jpg"
它真正的网址:"http://192.168.6.60:8080/user/20220728/192.168.6.60:8080/src/18.jpg"




本地相对根路径
思考:用户本地打开: "file:///c:/xx/xx2/index.html"
页面中有一个img的src是 : "/src/18.jpg"
它真正的路径:"file:///c:/src/18.jpg"

网络相对根路径
"/src/18.jpg"
思考:
用户输入网址: http://192.168.6.60:8080/user/20220728/newspage
打开了一个页面,在这个页面中有一个img的src是 : "/src/18.jpg"
请问192.168.6.60:8080这个服务器会受到req.url是什么?
答:"/src/18.jpg" 
它真正的网址:"http://192.168.6.60:8080/src/18.jpg"
*/

7、node.js中的模块化1

node.js中有3种模块

//1
var fs = require("fs") //内置模块/核心模块  node.js安装时 自己就装好了的模块
//2
var mime = require("mime") //第三方模块 下载 然后使用  npm i mime

3、自定义模块

var myquerystring = require("./myquerystring.js") //自定义模块
 myquerystring.tool()//需要引入myquerystring.js这个文件
 //myquerystring.js这个文件需要导出

导出:
在这里插入图片描述

8、node.js中的模块化2

在这里插入图片描述

9、npm和配置文件package.json

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值