node.js

cmd命令:

? ?./? 當(dāng)前目錄

? ?../ 上一級(jí)

? ?dir? 查看當(dāng)前目錄

? ?ls? 查看當(dāng)前目錄下文件

? ?windows 切換盤符 d:

? ?cls清屏

? ?cd +文件加名

es6:

1.let/const

2.對(duì)象里的方法function可以省略

3.函數(shù)中的默認(rèn)參數(shù)

4.template

5.箭頭函數(shù)

6.展開操作符

7.解構(gòu)賦值

8.Symbol

9.class 模擬類,但本質(zhì)是基于原型的

10.for ...of

11.promise 解決回調(diào)金字塔.回調(diào)地獄

12.生成器函數(shù),可以退出函數(shù)

13.JS模塊化

NodeJS:

1.node.js開發(fā)環(huán)境搭建

2.npm nodejs包管理器

3.CommonJS模塊化標(biāo)準(zhǔn)化,AMD(require)

4.導(dǎo)出模塊/加載模塊

fs模塊(讀寫文件)

var fs = require("fs");//加載模塊

//異步讀取文件

fs.readFile("./readme.txt","utf8", (err, data) => {

if(err) throw err;

console.log(data);

});

//同步讀取文件 Synchrous

var data = fs.readFileSync("./readme.txt","utf8");

console.log(data);

//異步寫入文件

fs.writeFile("./test.txt", "This is test content~~~",(err) => {

if(err)throw err;

console.log("寫入成功");

})

console.log("write");

//同步寫入文件

fs.writeFileSync("./test.txt", "This is test content~~~");

console.log("write");

查看路徑信息stat:fs.stat(path, (err, stat) => {})

fs.stat("./test", (err, stat) => {

if(err) throw err;

console.log(stat);

if(stat.isFile()) {

console.log("該路徑為文件");

}else if (stat.isDirectory()) {

console.log("該路徑為文件夾");

}

})

path模塊

var path = require("path"); //加載模塊

path.dirname(url) 獲取目錄名

path.extname(url)獲取后綴名

path.join([...paths]) 拼接路徑

var url = "https://nodejs.org/dist/latest-v6.x/docs/api/path.html";

var p1 = path.basename(url,".html");

console.log(p1); //path

var p2 = path.dirname(url);

console.log(p2); //https://nodejs.org/dist/latest-v6.x/docs/api

var p3 = path.extname(url);

console.log(p3); //.html

var p4 = path.join(__dirname, "./a", "../b", "c");

console.log(p4); //E:\node\nodejs_2\b\c

querystring模塊 查詢字符串

var qs = require("querystring");

var o = {

color: "red",

border: "1px solid red",

"font-size": "16px"

}

var ret = qs.stringify(o, ";", ":");

console.log(ret);

// "color:red;border: 1px solid red;font-size: 16px"

http模塊

var http = require("http"); //加載模塊

var server = http.createServer((request, response) => {

//創(chuàng)建一個(gè)web服務(wù)器

//request

//response

//設(shè)置響應(yīng)頭

console.log(request.url);

switch(request.url) {

? ? ? ? ? ? ?case "/":

? ? ? ? ? ? ? ? ? ? response.write("首頁");

? ? ? ? ? ? ? ? ? ? ?break;

case "/list":

response.write("列表頁");

break;

case "/detail":

response.write("詳情頁");

break;

}

response.writeHead(200, {

"Content-Type":"text/html; charset=utf8"

})

response.end();

//if(request.url)

})

//http80端口號(hào) ftp23端口號(hào)

server.listen(3000, function() {

console.log("server has started at port 3000");

})

1.http請(qǐng)求頁面,不是該文件目錄下的頁面重定向,其余的根據(jù)目錄查找

var http = require("http"); //CommonJS規(guī)范 加載模塊

var fs = require("fs");

var path = require("path");

var server = http.Server(); //創(chuàng)建服務(wù)器

server.on("request", function(req, res) {

var filepath = path.join(__dirname, "./www", req.url);

if(req.url === "/") {

filepath = path.join(filepath, "index/html");

}

try{

var stat = fs.statSync(filepath);

if(stat.isFile()) {

var content = fs.readFileSync(filepath);

res.setHeader("Content0length", Buffer.bytelength(content))

res.write(content);

}else if(stat.isDirectory() {

//當(dāng)請(qǐng)求的路徑是目錄的時(shí)候

})

}catch(e) {

//重定向301(永久) 302(暫時(shí))

res.writeHead(302, {

"Location" : "/"

})

}

res.end();

})

server.listen(3000, function() {

console.log("server has started");

})

http協(xié)議:

HyperText Transport Protocol)是超文本傳輸協(xié)議的縮寫.

http請(qǐng)求:get/post/put/delete(get在地址欄,傳輸速度快,大小有限制.在頭,只能傳輸一些文本;post加密傳輸,在正文)

可以發(fā)起http請(qǐng)求的方式:瀏覽器/postman/curl/Fiddle/php/node.js

http1.0和http1.1的區(qū)別:1.0是每次請(qǐng)求都建立一個(gè)連接,而1.1是多個(gè)請(qǐng)求一個(gè)連接.

報(bào)文:請(qǐng)求頭(post有content-type:"application-x-www-form-urlencoded", cookie)+正文

xhr.readystate

XMLHttpRequest.UNSENT? 0? ? ? ? 初始化連接

XMLHttpRequest.OPENED? 1? ? ? ? 連接建立

XMLHttpRequest.HEADER_RECEIVED 2? 接收到請(qǐng)求頭

XMLHttpRequest.LOADING? 3? ? ? ? 處理數(shù)據(jù)

XMLHttpRequest.DONE? ? 4? ? ? ? 處理完畢

xhr.status HTTP響應(yīng)狀態(tài)碼

1開頭? 101 切換協(xié)議

2開頭? 成功? 200

3開頭? 重定向? 304 301/302

4開頭? 客戶端錯(cuò)誤? 404 403

5開頭? 服務(wù)器端錯(cuò)誤

2.爬蟲 cheerio

原理: 1.拉取頁面(字符串)http.get/request(node),file_get_content(php)

2.使用模塊,方便快捷篩選.cheerio(node), simple.html.dom.php(php)

3.收集信息

npm install cheerio //安裝cheerio模塊

npm init

// spider.js

var http? ? = require("http");

var cheerio = require("cheerio");

var fs? ? ? = require("fs");

3.express 基于 Node.js 平臺(tái),快速、開放、極簡(jiǎn)的 web 開發(fā)框架。

nmp install express -g

npm install express-generator -g(快速創(chuàng)建express的整體目錄)

express -h

express myapp

cd myapp

npm start

express

1.新建文件夾

cd到該文件目錄下

npm init (enter name:myapp enter....)

npm install express

在myapp里面新建app.js

在app.js里面寫代碼

var express? = require("express"),//加載express模塊

http = require("http"), //加載http模塊

app? = express(), //創(chuàng)建一個(gè)express實(shí)例

server? = http.createServer(app); //app可以作為http創(chuàng)建服務(wù)器的回調(diào)函數(shù)

//靜態(tài)資源掛載,設(shè)置靜態(tài)資源目錄

//中間件 express.static

//掛載中間件 使用use

app.use(express.static("public"));

//定義一個(gè)獲取訪問用戶IP的中間件

//哪個(gè)先掛載,先使用哪個(gè)的代碼

var ips = [];

function getIp(req, res, next) {

console.log(req.ip);

ips.push(req.ip);

next();

}

function responseIP (req, res, next) {

res.send(req.ip);

}

app.use((req, res, next) => {

console.log("hello");

next();

})

app.use(getIp);

app.use(responseIP);

app.get("/", (req, res) => {

res.send("首頁");

})

app.get("/list", (req, res) => {

// console.log(req.ip);獲取ip

res.send("列表頁");

})

app.get("/details", (req, res) => {

res.send("詳情頁");

})

server.listen(3000, function() {

//監(jiān)聽端口號(hào)3000,并提示服務(wù)成功開啟

console.log("Server has started");

})

總結(jié)express:中間件和路由.

3.websocket 構(gòu)建實(shí)時(shí)應(yīng)用(你猜我畫,視頻直播)

全雙工、雙向數(shù)據(jù)、長(zhǎng)連接的協(xié)議,h5新增特性

服務(wù)器端能夠主動(dòng)向?yàn)g覽器端發(fā)送消息

必須瀏覽器要支持,服務(wù)器要支持,數(shù)據(jù)傳輸格式是Frame

過程:第一次是由客戶端發(fā)起,請(qǐng)求的報(bào)文的請(qǐng)求頭會(huì)多一些內(nèi)容,要求服務(wù)器更換協(xié)議.

服務(wù)器端響應(yīng)回報(bào)文,響應(yīng)頭也會(huì)多幾條數(shù)據(jù),之后就能建立長(zhǎng)的連接.

a. 發(fā)起請(qǐng)求,跟一般的http請(qǐng)求不同的地方,

請(qǐng)求頭 包括:

Sec-WebSocket-Key:asgK0L1sVa22xbiq8MU58w==

Sec-WebSocket-Version:13

Upgrade:websocket

讓服務(wù)器更新切換協(xié)議 websocket

b. 服務(wù)器收到請(qǐng)求,upgrade

經(jīng)過一定的步驟算法 產(chǎn)生

Sec-WebSocket-Accept:IQcF4EGKE8sALj3PxJRvYQ1iG2Y

2.? npm init

npm install socketio express --save-dev

socketio 是對(duì)websocket協(xié)議封裝的一個(gè)模塊,讓客戶端和服務(wù)器端的寫法都是一樣的

socket.emit()發(fā)數(shù)據(jù)

socket.on()收數(shù)據(jù)

監(jiān)聽客戶端連接,回調(diào)函數(shù)會(huì)傳遞本次連接的socket

io.on('connection',function(socket));

給所有客戶端廣播消息

io.sockets.emit('String',data);

給指定的客戶端發(fā)送消息

io.sockets.socket(socketid).emit('String', data);

監(jiān)聽客戶端發(fā)送的信息

socket.on('String',function(data));

給該socket的客戶端發(fā)送消息

socket.emit('String', data);

3.WebSocket

new Websocket("ws:localhost/chat")

gulp

npm init

npm install gulp --save-dev

新建 gulpfile.js(默認(rèn)執(zhí)行的文件)

//gulpfile.js

//1.安排任務(wù), 2.自動(dòng)執(zhí)行

var gulp = require("gulp");

var uglify = require("gulp-uglify");

//task1 定義一個(gè)任務(wù)ufligy 壓縮js

gulp.task("uglify" ,function() {

gulp.src("./src/js/*.js")

.pipe(uglify())

.pipe(gulp.dest("./dist/js"))

})

安裝gulp-uglify插件 npm install gulp-uglify --save-dev

新建src文件夾 > js文件夾 >demo.js

新建dist文件夾> js文件夾 >

運(yùn)行 gulp uglify

然后在dist文件夾就能找到已經(jīng)壓縮的demo.js

插件:gulp-less

插件:gulp-minify-css

//文件看守, 監(jiān)聽./src/less/*.less 文件的變化,變化運(yùn)行該less任務(wù)

gulp.task("default", ["uglify", "less"], function() {

gulp.watch("./src/less/*.less", ["less"]);

})

//運(yùn)行 gulp即可即使更改代碼

webpack

全局安裝webpack npm install webpack --save-dev

新建文件夾webpack

1.初始化一個(gè)項(xiàng)目 npm init

name:不能為webpack

2.在該文件夾下面安裝npm install webpack --save-dev

3. webpack 資源模塊化

webpack ./app/main.js ./app/bundle.js

4. mongodb 非關(guān)系型數(shù)據(jù)庫

mongoose Nodejs操作mongodb數(shù)據(jù)庫的模塊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 個(gè)人入門學(xué)習(xí)用筆記、不過多作為參考依據(jù)。如有錯(cuò)誤歡迎斧正 目錄 簡(jiǎn)書好像不支持錨點(diǎn)、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,505評(píng)論 1 37
  • Express 簡(jiǎn)介 Express 是一個(gè)簡(jiǎn)潔而靈活的 node.js Web應(yīng)用框架, 提供了一系列強(qiáng)大特性幫...
    保川閱讀 2,039評(píng)論 0 24
  • 學(xué)習(xí)網(wǎng)址 Express 框架核心特性: 可以設(shè)置中間件來響應(yīng) HTTP 請(qǐng)求。 定義了路由表用于執(zhí)行不同的 HT...
    飛魚_JS閱讀 1,596評(píng)論 0 5
  • 一:簡(jiǎn)單的Node.js介紹簡(jiǎn)單的說Node.js是運(yùn)行在服務(wù)端的javascriptNode.js 是基于Chr...
    可樂_d001閱讀 367評(píng)論 0 1
  • 有個(gè)很好的消息 通神拿到四大的offer了,簡(jiǎn)直替他高興壞了 念念不忘必有回響,他做到了,我也可以的,對(duì)吧! 晚上...
    紅心芭樂閱讀 282評(píng)論 0 0