http模块:
1.引入node自带的模块http,这个模块可调用函数来创建后端服务器
var http = require("http")
//创建一个服务器对象,回调函数不会直接运行,会在用户每次访问这台服务器的某个端口才会运行
var app = http.createServer((req, res) => {})
注:req是前端传进来的数据包,res是后端返回的数据包。
? ? ? ? 2.一定要写端口:表示ip是访问计算机的标志 ?端口就可以进入计算机的具体哪一个程序(此处表示监听的是计算机上端口号为8080的程序)
app.listen(8080)
? ? ? 3.设置编码和数据包格式(此处是表示返回给前端一个HTML文件,使用utf-8编码)
res.setHeader("content-Type", "text/html;charset=utf-8")
? ?注:"text/html":返回的是html文件
? ? ? ? ? ?"text/css":返回的是css文件
? ? ? ? ?? "text/txt":返回的是txt文件
????????????"image-png":返回的是png格式的图片
? ? ? ? 还有其他的,此处就不以一一列举了。
4.后端返回数据给前端res.end()
res.end("<h1>这是个HTML文件(主页)</h1>")
注:end()一调用,就返回数据代表此次会话结束,就断开连接
????????res.end()方法接受 字符串或者buffer
//如果服务器监听到8081端口有客户端访问,就返回"hello,666"
//引入node自带的模块http,这个模块可调用函数来创建 后端服务器
var http = require("http")
//创建一个服务器对象,回调函数不会直接运行,会在用户每次访问这台服务器的8081端口才会运行
//req是前端传进来的数据包,res是后端返回的数据包
var app = http.createServer((req, res) => {
//打印前端输入的网址
console.log(req.url)
//可以通过网址:端口号后面的部分来进行多网页
if (req.url == "/home") {
//配置返回给用户的数据包的数据格式 和编码的类型utf-8
res.setHeader("content-Type", "text/html;charset=utf-8")
//end()一调用,就返回数据代表此次会话结束,就断开连接
res.end("<h1>这是个HTML文件(主页)</h1>")
} else if (req.url == "/cart") {
res.setHeader("content-Type", "text/html;charset=utf-8")
res.end("<h2>这是个HTML文件(购物车网页)</h2>")
}else{
res.end("not found")
}
})
//监听计算机的端口:min-max
app.listen(8081)
fs模块:
? ? ? ? 1.引入fs自带的模块?
var fs=require("fs")
? ? ? ? 2.读取文件?fs.readFile(path,(err,data)=>{})
fs.readFile("../picture/sky.png",(err,data)=>{
//读取成功或失败都有值
console.log(err,data)
})
注:path 填路径 可以绝对可以相对 err代表读取失败 data代表读取成功 它是一个buffer类型的数据(二进制数据流) 可以通过toString()转化为字符串。
? ? ? ? 3.写入文件(创建文件)?fs.writeFile(path ,data,callback(er))
fs.writeFile("./write","这是我写的文件",(err)=>{
console.log(err)
})
注:如果文件存在,该方法写入的内容会覆盖旧的文件内容,不存在就创建一个新的文件
????????path - 文件路径;
???????? data - 要写入文件的数据,可以是 String(字符串);
????????callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
? ? ? ? ?4.以追加的方式写文件?fs.appendFile(path?+"追加的内容",callback(err))
fs.appendFile(__dirname + '/write', '我会追加到文件内容的末尾', function (er) {
console.log('追加内容完成');
})
? ? ? ? 5.删除文件??fs.unlink(path,callback(err))
fs.unlink("./write", (err) => {
console.log(err) //null
})
? ? ? ? 6.创建目录?fs.mkdir(path,callback(err))
fs.mkdir("./dir1",(err)=>{
console.log(err)//null 在指定路径创建了一个文件夹,没有出现错误
})
? ? ? ? 7.?移动/重命名文件或目录:整个功能相当于重命名一个文件/文件夹路径
fs.rename(oldPath, newPath, callback);
fs.rename("./dir1","./dir4",(err)=>{
console.log(11111,err)//重命名
})
fs.rename("./write333","./dir3/write333",(err)=>{
console.log(2222,err)//移动
})
注:oldPath, 原目录/文件的完整路径及名;
????????newPath, 新目录/文件的完整路径及名;如果新路径与原路径相同,而只文件名不同,则是重命名
????????callback(err), 操作完成回调函数;err操作失败对象
????????移动文件有一个bug:新路径和旧路径必须是同一个根盘
? ? ? ? 8.拷贝文件??fs.copy(oldPath, newPath, callback);
fs.copyFile("./write2","./dir2/write22",(err)=>{
console.log(333,err)
})
注:?oldPath, 原文件的完整路径;
????????newPath, 新文件的完整路径;
????????callback(err), 操作完成回调函数;err操作失败对象
????????拷贝文件以后两个文件都会存在磁盘中
url模块:?
????????可以把url网址解析为一个对象,里面有两个重要的属性:pathname和query string
????????pathname:是端口号后面的,"?"以前的地址
? ? ? ?querystring是"?"后面的键值对
? ? ? ? url是一个对象,其中的query string也是对象
? ? ? ? 通过pathname,可以实现静态资源托管
var http = require("http")
var fs = require("fs")
var url = require("url")
var querystring=require("querystring")
var app = http.createServer((req, res) => {
var urlobj = url.parse(req.url)
var path = urlobj.pathname
console.log(path)
var que = urlobj.query
if (req.url == "/") {
fs.readFile(__dirname + "/picture" + "/ysx.jpg", (err, data) => {
if (!err) {
res.end(data)
} else {
res.end("1111404")
}
})
}
fs.readFile(__dirname + "/picture" + path, (err, data) => {
var queryobj=querystring.parse(que)
console.log(queryobj)//获取网址“?”后面的键值对
if (!err) {
res.end(data)
} else {
res.end("404")
}
})
})
app.listen(8085)
在读取文件的路径里面拼接了path,如果前端网址还有"?"以后的部分,也可以读取到相应的文件。如果直接写的类似"./src/index.html",前端网址还有问号后面一部分就读取不出来(如:http://192.168.6.112:8080/src/index.html?conut=20&&name=rose",读取不了相应文件,如果是用的pathname则可以读取出来)
|