nodejs
- 基於Chrome V8引擎的Javascript執行環境
- 使用了一個事件驅動、非阻塞式I/O模型,輕量又高效
- 包管理器npm
檔案路徑
- __dirname//不包含檔名的路徑
- __filename//包含檔名的路徑
global
- nodeJs的全域性物件
modul和requi
module.exports=要模組的函式或者物件
require(`檔案路徑`)//引入模組
事件模組
let events=require(`events`); //引入事件模組
let myEmitter=new events.EventEmitter(); //建立EventEmitter物件
myEmitter.on(`someEvent`,function (msg) {console.log(msg)}); //註冊事件
myEmitter.emit(`someEvent`,`實現事件並傳遞引數到註冊時間的回撥函式中`);//第一個引數是事件,第二個引數是事件引數
setImmediate(非同步事件)// setImmediate()方法可以使事件非同步發生
檔案系統
- let fs=require(`fs`); //引入檔案系統模組
- let readMe=fs.readFileSync(`readMe.txt`,`utf8`) //同步讀取檔案
- fs.writeFileSync(`writeMe.txt`,readMe);//同步寫入檔案
- fs.readFile(`readMe.txt`,`utf8`,function (err,data) {if (err) throw err;console.log(data);})//非同步讀取檔案
- fs.writeFile(`writeMe2.txt`,data) //非同步寫入檔案
- fs.unlink(`writeMe3.txt`,function(err){if (err) throw err;console.log(1);})//刪除檔案
- fs.mkdirSync(`stuff`)//同步建立資料夾
- fs.rmdirSync(`stuff`) //同步刪除檔案
- fs.mkdir(`檔名`,回撥函式) //非同步建立資料夾
- fs.rmdir(`檔名`,回撥函式) //非同步刪除資料夾
- fs.createReadStream(__dirname + `/readMe.txt`, `utf8`); //讀取資料流
建立伺服器
//通過HTTP模組,建立本地伺服器
let http=require(`http`);
//建立本地伺服器方法
let server=http.createServer(function (req,res) {
console.log(`客戶端向伺服器端傳送請求`+req.url);
res.writeHead(200,{"Content-type":"text/plain"});
res.end("Server is working!");
});
//服務物件監聽伺服器地址以及埠號
server.listen(3002,"127.0.0.1");
console.log("server is running....");
讀取HTML資料
let http=require(`http`)
let fs = require(`fs`);
//搭建伺服器
let server = http.createServer(function (req, res) {
res.writeHead(200, {"Content-type": "text/html"});
//讀取資料流
let myReadStream = fs.createReadStream(__dirname + `/index.html`, `utf8`);
myReadStream.pipe(res);
})
server.listen(3000,`127.0.0.1`);
console.log(`server is running....`)
讀取json資料
let http=require(`http`)
let fs = require(`fs`);
//搭建伺服器
let server = http.createServer(function (req, res) {
res.writeHead(200, {"Content-type": "application/json"});
//讀取資料流
let myReadStream = fs.createReadStream(__dirname + `/person.json`, `utf8`);
myReadStream.pipe(res);
})
server.listen(3000,`127.0.0.1`);
console.log(`server is running....`)
路由
let http=require(`http`)
let fs = require(`fs`);
//搭建伺服器
let server = http.createServer(function (req, res) {
if (req.url===`/home` || req.url===`/`){
res.writeHead(200, {"Content-type": "text/html"});
fs.createReadStream(__dirname + `/index.html`).pipe(res);
}else if (req.url===`/contact`){
res.writeHead(200, {"Content-type": "text/html"});
fs.createReadStream(__dirname + `/content.html`).pipe(res);
}else if(req.url===`/api/about`){
let data=[{name:"ChangJun",age:`30`},{name:"Bucky",age:`28`}]
res.writeHead(200, {"Content-type": "application/json"});
res.end(JSON.stringify(data))
}
})
server.listen(3000,`127.0.0.1`);
console.log(`server is running....`)
express框架
- 已經封裝好伺服器
- 已經封裝好路由
- 已經封裝好中介軟體兒
- 已經封裝好網路請求…
express使用
- npm install express –save-dev
//引入express模組
let express=require(`express`);
//例項化expres物件
let app=express();
//通過物件呼叫對應的方法
//根據使用者請求的地址,返回對應的資料資訊
app.get(`/`,function (req,res) {
res.send(`This is home page`);
});
app.get(`/contact`,function (req,res) {
res.send(`this is contace`)
});
//路由引數
app.get(`/profie/:id`,function (req,res) {
res.send(`您所訪問的路徑引數為`+req.params.id);
});
//監聽伺服器的埠號
app.listen(8888);
EJS模版引擎
- npm install ejs –save-dev
app.js
//引入express模組
let express=require(`express`);
//例項化expres物件
let app=express();
//配置檢視引擎
app.set(`view engine`,`ejs`);
//讓伺服器識別外部樣式表
app.use(`/assets`,express.static(`assets`));
//通過物件呼叫對應的方法
//根據使用者請求的地址,返回對應的資料資訊
app.get(`/`,function (req,res) {
res.sendFile(__dirname+`/index.html`);
});
app.get(`/contact`,function (req,res) {
res.sendFile(__dirname+`/content.html`)
});
//路由引數
app.get(`/profie/:id`,function (req,res) {
let data=[{age:21,name:[`ChangJun`,`WuXiaoHong`]},{age:21,name:[`ChangJun2`,`NiXiaoLei`,]}];
res.render(`profile`,{websiteName:req.params.id,data:data});
});
//監聽伺服器的埠號
app.listen(8888);
profile.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>homepage</title>
<style>
body {
background: skyblue;
color: white;
padding: 30px;
}
h1 {
font-size: 48px;
letter-spacing: 2px;
text-align: center;
}
h2 {
font-size: 48px;
letter-spacing: 2px;
text-align: center;
}
p {
font-size: 16px;
text-align: center;
}
ul {
text-align: center;
list-style: none;
}
</style>
</head>
<body>
<h1>Hello ChangJun!<%= websiteName %></h1>
<h2>個人介紹</h2>
<ul>
<% data.forEach(function (item) { %>
<li>年齡:<%= item.age %></li>
<% item.name.forEach(function (item) { %>
<li>
<%=item %>
</li>
<% }) %>
<% }) %>
</ul>
</body>
</html>