node模块的引用顺序
当require('xxx')一个模块时:
优先加载核心模块: 如果显示指定文件模块扩展名,则在该路径下查找该模块是否存在;
以路径形式加载文件模块:如果未显示指定文件模块扩展名,则在该路径下,依次查找以.js、.json、.node为扩展名的模块是否存在;
require(./xxx.json)引过来的是一个对象数据类型,所以可以用 变量.属性的方法来取值 console.log(a.a)
内置http模块
http.createServer //方法-- 该函数用来创建一个HTTP服务器,并将 requestListener 作为 request 事件的监听函数。 由于该方法属于http模块,使用前需要引入http模块 var http= require(“http”)
const http = require("http");//引入http模块
var ser = http.createServer((req,res)=>{//创建http服务 req---请求对象,res---响应对象
res.writeHead(200,{"content-type":"text/html;charset=utf8"});//发送http头部 http状态值200 设置内容类型 ,告诉浏览器用何种方式来解析之后的代码
res.write("<h1>hello</h1>");
res.end("<p>hi</p>")//res指定了响应头,响应体内容为node.js,用end结束。
})
ser.listen(3000,()=>{//最后调用listen函数,监听3000端口。
console.log(`listen${ser.address().port}...`)
})
前后端分离
后端写json数据 然后在js中获取json数据的文件夹 接受json中的所有数据并允许跨域 将json对象转换成json字符串 监听端口号为5000的端口 把数据传到这个端口中
前端用ajax获取到5000端口获取数据
1第一步为json数据
a.json
{
"stus":[
{"name":"张三",
"age":15
}
]
}
2第二步为后端封装接口
const http = require("http");
var stus = require("./a");
var ser = http.createServer(function(req,res){
res.writeHead(200,{"content-type":"application/json","Access-Control-Allow-Origin":'*'})
res.end(JSON.stringify(stus));
})
ser.listen(5000,()=>{
console.log("listen "+ser.address().port+"...");
})
3第三步为前端调取数据
$.get({
var temUl =$("<ul>");
res.stus.map((item)=>{
temUl.append("<li>姓名:"+item.name+" 年龄:"+item.age+"</li>");
})
$("#box").append(temUl);
})
nodejs模块中的------fs模块
fs模块用于对系统文件及目录进行读写操作
1.读取文件的三种方式
①异步读文件
var const = require("fs");//引入fs模块
fs.readFile("文件的路径","utf-8",(err,data)=>{// readFile的回调函数接收两个参数,err是读取文件出错时触发的错误对象,data是从文件读取的数据。
if(err){
console.log("失败")
}
console.log(data)
});
②同步读文件
var const = require("fs");
var content = fs . readFileSync("文件的路径","utf-8");
console.log(content)
③流的方式读取文件
var const = require("fs");
var rs = fs.createReadStream("文件路径")
var str = "";
rs.on("data",(thunk)=>{//on是事件监听的方法
str+=thunk;
})
rs.on("end",()=>{
console.log(str);
})
2.写入文件的三种方式
①异步写入文件
var const = require("fs");
fs.writeFile("文件路径","内容",()=>{//写入文件内容(如果文件不存在会创建一个文件),写入时会先清空文件
console.log("写入成功")
});
②同步写入文件
var const = require("fs");
fs.writeFileSync("文件路径","内容");
③流的方式写入文件
var ws = fs.createWriteStream("文件路径");
ws.write("内容","utf-8");
ws.end();
ws.on("finish",()=>{
console.log("写入完成")
})
3.显示一个网页(在CMD运行后访问 localhost:3000)
①同步显示
const http = require("http");
const fs = require("fs");
http.createServer((req,res)=>{
res.writeHead(200,{"content-type":"text/html;charset=utf8"});
var str = fs.readFile("文件路径","utf-8",(err,data)=>{
if(!err){
res.end(data);
}
})
}).listen(3000,()=>{
console.log("listen 3000.....")
})
②异步显示
const http = require("http");
const fs = require("fs");
http.createServer((req,res)=>{
res.writeHead(200,{"content-type":"text/html;charset=utf8"});
var str = fs.readFileSync("文件路径","utf-8");
res.end(str)
}).listen(3000,()=>{
console.log("listen 3000.....")
})
③流的方法显示
const http = require("http");
const fs = require("fs");
http.createServer((req,res)=>{
res.writeHead(200,{"content-type":"text/html;charset=utf8"});
fs.createReadStream("文件路径").pipe(res); // pipe是管道
}).listen(3000,()=>{
console.log("listen 3000.....")
})
4.在本地拷贝一个视频(大文件的拷贝)
fs.stat 表示文件的状态
const fs = require("fs");
var rs = fs.createReadStream("./w.wmv");//读取这个文件
var ws = fs.createWriteStream("./wcopy.wmv");//创建一个copy文件
var size = 0 ;//文件的总大小
var len = 0;//当前读取的文件的大小
fs.stat("./w.wmv",(err,info)=>{//info是信息情报
if(!err){
size = info.size;//获取文件的大小
}
rs.on("data",(thunk)=>{
console.log((len/size*100).toFixed(2)+'%')//输出加载进度
ws.write(thunk)
})
rs.on("end",()=>{
console.log("copy over")
})
})