nodejs通過stream方式加載頁面(stream方式加載優化性能)
小貼士:nodemon index.js 啓動index.js頁面
// 1.原生node如何區分路由??(後端路由)
// 2.原生node如何加載頁面?? (性能問題:stream);
// 3.原生node如何加載第三方資源???
// 單頁面應用(無刷新)spa vue-router 、 react-router;
// 有刷新;
const http = require("http");
const fs = require("fs"); //引入FS模塊
const mime = require("./mime.json"); //引入mime標準,各種類型標準
const path = require("path"); //獲取後綴名
let server = http.createServer((req,res)=>{ //req客戶端到node端相關 res返還相關
console.log(req.url);
if(req.url==="/index"){
res.setHeader("content-type","text/html;charset=utf8");
// let indexData = fs.readFileSync("./views/index.html");
// 流方式:節約性能;
let rs = fs.createReadStream("./views/index.html"); //不通過文件方式,通過流方式節約性能
// res.write(indexData);
rs.pipe(res); //rs放到pipe管道里,64K文件拆分,這裏不能加res.end();會報錯
}else if (req.url==="/detail"){
res.setHeader("content-type","text/html;charset=utf8");
// let detailData = fs.readFileSync("./views/detail.html");
let rs = fs.createReadStream("./views/detail.html"); //通過流方式節約性能
// res.write(detailData);
rs.pipe(res); //rs放到pipe管道里
}else if(req.url==="/getData"){
// 模擬接口;api http://localhost:4000/getData getData數據接口,也可以寫JSON數據,輸出到頁面
let obj = {
name:"張三",
age:20
}
res.write(JSON.stringify(obj));
res.end();
}else{
// console.log(req.url); 因爲設置了setHeader,所以引入的css文件也是txt/html格式,會報錯
let extName = path.extname(req.url); // 獲取後綴;mime標準,什麼類型用什麼標準,前面引入path模塊,這裏查找後綴
//res.setHeader("content-type","text/css");
res.setHeader("content-type",mime[extName]); //針對後綴單獨設置頭部格式
// let cssData = fs.readFileSync(__dirname+"/views"+req.url)
// res.write(cssData);
//fs.readFileSync(__dirname+"/views/css/index.css")
let rs = fs.createReadStream(__dirname+"/views"+req.url); //__dirname當前執行文件地址
rs.pipe(res);
}
// 注意 流方式 不要end;
// res.end();
})
server.listen(4000);
nodejs通過fs模塊加載頁面(用上面的stream方式加載優化性能)