后端——http模块、路径、fs模块、静态网站

目录

一、http模块

二、路径 __dirname  _filename

三、fs模块

1、读取文件  fs.readFile

2、写入文件 (创建文件)  fs.writeFile

3、删除文件 fs.unlink

4、以追加方式写文件  fs.appendFile

5、创建目录

6、移动 / 重命名文件或目录:

7、拷贝文件

8、读取目录/文件夹     fs.readdir

四、http+fs

五、静态网站


一、http模块

var app=http.createServer((req,res)=>{})    创建一个服务器

app.listen(81) //端口的意义:ip是访问计算机的标志 端口就可以进入计算机的具体哪一个程序

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

res.write("xxx")      //可以多次调用 代表给前端传输数据

res.end() //可以传输数据也可以不传输,它是当前这一次网络请求结束的标志,一旦执行了就断开连接 

req.url   前端给后端发送 网络请求的网址"http://ip:port"后面的部分字符串

解析url来做出不同页面的网址 和不同参数传不同数据网址

//引入官方的http模块
var http=require("http")
//创建一个服务器
var app=http.createServer((req,res)=>{
  //判断用户输入的网址
  if(req.url=="/hq"){
    //设置数据的头部信息为html文本文档,编码为utf8
    res.setHeader( 'content-Type' , 'text/plain; charset=utf8 ')
    //持续写入数据包中
    res.write("

欢迎来到1

")    res.write("

欢迎来到2

")    //最后一次写入数据包,并断开连接    res.end("

hai

") //end和return很像,它执行后,后面就不再执行了 } }) app.listen(8081) //监听端口 //用户浏览器地址栏输入:http://服务器电脑的ip:8081/hq 每当用户访问一次,后端的那个回调函数就会执行一次

二、路径 __dirname  _filename

在node.js环境中,有两个全局变量

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

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

 总结:  __dirname+‘\5-_dirname.js’ ==>__filename

console.log(__dirname,123,__filename)  
//D:\存储\桌面\前端\07-全栈笔记\代码
//123
//D:\存储\桌面\前端\07-全栈笔记\ 代码\5-_dirname.js

三、fs模块

1、读取文件  fs.readFile

fs.readFile(path,(err,data)=>{})

path 填路径 可以绝对可以相对

err代表读取失败

data代表读取成功 它是一个buffer类型的数据(二进制数据流) ,可以通过toString()转化为字符串  , data.toString ==> 就是这个html/css等代码  (注意:图片就不要转字符串了,就发送buffer)

注意:res.end()方法接受 字符串或者buffer

//引入fs系统自带的模块  file system
var fs=require("fs")
// ./就是写这个文件它所在的目录
fs.readFile("./img/h5.png",(err,data)=>{  
    console.log(err,data)  //null 
})  //如果错了,那err就是一个对象,data是undefined
fs.readFile("./text.txt",(err,data)=>{  
    console.log(err,data)  
})  
//这两个是异步执行的

./img/h5.png这里的路径不能写http://www.baidu.com,别人的网站,也就是别人的服务器。要想要进入别人的网站,就写一个html,将网站写在里面,在我的后端获取html

2、写入文件 (创建文件)  fs.writeFile

fs.writeFile(path ,data,callback(er))

如果文件存在,该方法写入的内容会 覆盖旧的文件内容,不存在就创建一个新的

path - 文件路径   (eg: __dirname+‘./1.txt’ )

data - 要写入文件的数据,可以是 String(字符串)

callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

           function(err){}     成功时:err=null  (如果文件夹不存在就报错,文件不存在就创建)

fs.writeFile(__dirname + "./img/1.png", "hello", function (err) {
    console.log(err)
})

3、删除文件 fs.unlink

fs.unlink(path,callback(err))

path - 文件路径。

callback(err) - 删除回调函数,err错误信息

删除文件,如果遇到权限问题,会删除失败

fs.unlink(__dirname + "./img/1.png",(err)=> {
    console.log(err)
})

4、以追加方式写文件  fs.appendFile

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

如果没有这个文件,就会创建一个

fs.appendFile(__dirname + "./1.txt", "hello",(err)=> {
    console.log(err)
})

5、创建目录

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

fs.mkdir(__dirname + '/test',(err)=>{})  //创建文件夹,就算写1.jpg,也是创建了一个文件夹,叫做1.jpg

6、移动 / 重命名文件或目录:

整个功能相当于 重命名一个文件/文件夹路径

fs.rename(oldPath, newPath, callback);

oldPath, 原目录/文件的完整路径及名;

newPath, 新目录/文件的完整路径及名;如果新路径与原路径相同,而只文件名不同,则是重命名

callback(err), 操作完成回调函数;err操作失败对象

移动文件有一个bug:新路径和旧路径必须是同一个根盘,也就是不能将C盘的东西移动到D盘

//移动
fs.mkdir(__dirname + '/test',(err)=>{})  //创建文件夹
var oldPath=__dirname + '/src/a/1.txt'   //1.txt就移走了
var newPath=__dirname + '/src/b/1.txt'
fs.rename(oldPath, newPath, (err)=>{});

//重命名
fs.mkdir(__dirname + '/test',(err)=>{})  //创建文件夹
var oldPath=__dirname + '/src/a/1.txt'   //1.txt重新命名为2.txt,位置不变,里面内容也不变
var newPath=__dirname + '/src/a/2.txt'
fs.rename(oldPath, newPath, (err)=>{});

7、拷贝文件

fs.copyFile(oldPath, newPath, callback);

oldPath, 原文件的完整路径;

newPath, 新文件的完整路径;

callback(err), 操作完成回调函数;err操作失败对象

拷贝文件以后两个文件都会存在磁盘中

var oldPath=__dirname + '/src/1.txt'  //原来的资源也还在,就有两个相同的
var newPath=__dirname + '/src2/1.txt'
fs.copyFileSync(oldPath, newPath, (err)=>{
    fs.unlink(oldPath,()=>{})  //将原来的文件删了
});

8、读取目录/文件夹     fs.readdir

fs.readdir(__dirname,(err,arr)=>{
    console.log(err,arr)
})

fs的功能非常多,可以在  File system | Node.js v16.16.0 Documentation   进行学习查阅

四、http+fs

假设电脑的ip为:192.168.6.160,如果输入192.168.6.160:8081(或者192.168.6.160:8081/  两者一样),最后页面上是error
如果后端的js的代码改变了,就要重新起服务器。如果只是后端引入的外部的一个html、css等文件修改了,就不需要重启服务器,只需更新网页即可

//写一个简单的http服务器

//引入官方的http模块:这个模块可以调用函数,来创建后端服务器
var http = require("http")
var fs = require("fs")
//创建一个服务器 (回调函数不会直接运行,会在用户每次访问当前计算机的IP下的8081端口时,就会调用,如果后面还加了/home   /car等等,这个函数也会调用,会反应相应的代码。)
var app = http.createServer((req, res) => { //req前端发来的数据包  res后端给前端的数据包的相关设置
    //前端的每一次网络请求,这个函数都会重新运行一次
    console.log(111)
    //判断用户输入的网址
    if (req.url == "/home") { //http://192.168.6.160:8081/home就会返回下面
        //设置数据的头部信息为html文本文档,编码为utf8。配置返回给用户的数据包 的数据格式 和编码的类型utf8(中文的时候写utf8)
        //MIME类型:'img/png'等等
        res.setHeader('content-Type', 'text/plain; charset=utf8 ')
        //持续写入数据包中
        res.write("

欢迎来到1

") res.write("

欢迎来到2

") //最后一次写入数据包,并断开连接 res.end("

我的世界

") //end函数只接收string或者buffer } else if (req.url == "/car") { res.setHeader('content-Type', 'text/plain; charset=utf8 ') res.end("

我的世界

") } else if (req.url = "/img/h5.png") { //输入:http://192.168.1.11:8081/img/h5.png时,显示图片 fs.readFile("./img/h5.png", (err, data) => { //当"./img/h5.png"这个照片读取后(无论成功或者失败),就会调用后面的函数 //如果失败了,err是一个对象,data是undefined //"./img/h5.png"这是相对路径,但是一般都是写绝对路径 //相对路径:写这个代码的所在文件的目录 if (!err) { //代表err没错 res.end(data) //data就是图片的编码——buffer(二进制) } else { res.end("not 404") } }) } else if(req.url = "/favicon.ico") { //这是网页的上面的小图标,每次会自发的网络请求favicon.ico fs.readFile("./favicon.ico",(err,data)=>{ res.end(data) }) } else { res.setHeader('content-Type', 'text/plain; charset=utf8 ') res.end("

你好 你网址乱输的 404

") } }) app.listen(8081) //监听端口 别人输入 我电脑的ip地址:8081,就可以访问到这代码 //用户浏览器地址栏输入:http://服务器电脑的ip:8081/home 每当用户访问一次

http://192.168.6.60:8081/ 和http://192.168.6.60:8081 一样,后面不写/ 浏览器会自动补全,就相当于pathname=/,所以data=undefined

五、静态网站

var http=require("http")
var fs=require("fs")
var app=http.createServer((req,res)=>{
    //这一段代码可以代替下面所有的if else
	//fs.readFile(__dirname+req.url,(err,data)=>{
		//res.setHeader('content-Type','text/html')
		//res.end(data)
	//})

	//前端的每一次网络请求 这个函数都会重新运行一次
	if(req.url=="/home"){
		fs.readFile("./index.html",(err,data)=>{   //"./index.html"上传的是一个html文件
			res.setHeader("content-Type","text/html;charset=utf8")  //text是一个大类型,还有redio、image等等。html是小类型,比如image有png、jpg等等
			res.end(data)
		})
	}
	else if(req.url=="/123"){
		res.setHeader("content-Type","text/html;charset=utf8")
		res.end("123")
	}
	else if(req.url=="/src/18.jpg"){
		fs.readFile("./src/18.jpg",(err,data)=>{
			res.setHeader("content-Type","image/png")
			res.end(data)
		})
	}
	else{
		res.end("404")
	}
})
app.listen(8081)

//现在能用的网址有三个:http://192.168.1.11:8081/home、http://192.168.1.11:8081/123、http://192.168.1.11:8081/src/18.jpg
//其它无用的网址有无数个:http://192.168.1.11:8081/这里随便输==>返回404


	
		
		
	
	
		

66666home

hello

xxxx

你可能感兴趣的:(java,服务器,html,开发语言,前端)