NodeJS學習筆記

常峻發表於2019-02-16

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>

相關文章