node.js

cmd命令:

? ?./? 當前目錄

? ?../ 上一級

? ?dir? 查看當前目錄

? ?ls? 查看當前目錄下文件

? ?windows 切換盤符 d:

? ?cls清屏

? ?cd +文件加名

es6:

1.let/const

2.對象里的方法function可以省略

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

4.template

5.箭頭函數(shù)

6.展開操作符

7.解構賦值

8.Symbol

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

10.for ...of

11.promise 解決回調金字塔.回調地獄

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

13.JS模塊化

NodeJS:

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

2.npm nodejs包管理器

3.CommonJS模塊化標準化,AMD(require)

4.導出模塊/加載模塊

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)建一個web服務器

//request

//response

//設置響應頭

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端口號 ftp23端口號

server.listen(3000, function() {

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

})

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

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

var fs = require("fs");

var path = require("path");

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

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() {

//當請求的路徑是目錄的時候

})

}catch(e) {

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

res.writeHead(302, {

"Location" : "/"

})

}

res.end();

})

server.listen(3000, function() {

console.log("server has started");

})

http協(xié)議:

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

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

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

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

報文:請求頭(post有content-type:"application-x-www-form-urlencoded", cookie)+正文

xhr.readystate

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

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

XMLHttpRequest.HEADER_RECEIVED 2? 接收到請求頭

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

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

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

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

2開頭? 成功? 200

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

4開頭? 客戶端錯誤? 404 403

5開頭? 服務器端錯誤

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 平臺倒彰,快速、開放、極簡的 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)建一個express實例

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

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

//中間件 express.static

//掛載中間件 使用use

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

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

//哪個先掛載,先使用哪個的代碼

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)聽端口號3000,并提示服務成功開啟

console.log("Server has started");

})

總結express:中間件和路由.

3.websocket 構建實時應用(你猜我畫,視頻直播)

全雙工致燥、雙向數(shù)據(jù)蜈缤、長連接的協(xié)議,h5新增特性

服務器端能夠主動向瀏覽器端發(fā)送消息

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

過程:第一次是由客戶端發(fā)起,請求的報文的請求頭會多一些內容,要求服務器更換協(xié)議.

服務器端響應回報文,響應頭也會多幾條數(shù)據(jù),之后就能建立長的連接.

a. 發(fā)起請求帜羊,跟一般的http請求不同的地方咒程,

請求頭 包括:

Sec-WebSocket-Key:asgK0L1sVa22xbiq8MU58w==

Sec-WebSocket-Version:13

Upgrade:websocket

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

b. 服務器收到請求,upgrade

經過一定的步驟算法 產生

Sec-WebSocket-Accept:IQcF4EGKE8sALj3PxJRvYQ1iG2Y

2.? npm init

npm install socketio express --save-dev

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

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

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

監(jiān)聽客戶端連接,回調函數(shù)會傳遞本次連接的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(默認執(zhí)行的文件)

//gulpfile.js

//1.安排任務, 2.自動執(zhí)行

var gulp = require("gulp");

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

//task1 定義一個任務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文件夾 >

運行 gulp uglify

然后在dist文件夾就能找到已經壓縮的demo.js

插件:gulp-less

插件:gulp-minify-css

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

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

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

})

//運行 gulp即可即使更改代碼

webpack

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

新建文件夾webpack

1.初始化一個項目 npm init

name:不能為webpack

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

3. webpack 資源模塊化

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末讼育,一起剝皮案震驚了整個濱河市帐姻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奶段,老刑警劉巖卖宠,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忧饭,居然都是意外死亡,警方通過查閱死者的電腦和手機筷畦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門词裤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鳖宾,你說我怎么就攤上這事吼砂。” “怎么了鼎文?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵渔肩,是天一觀的道長。 經常有香客問我拇惋,道長周偎,這世上最難降的妖魔是什么抹剩? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蓉坎,結果婚禮上澳眷,老公的妹妹穿的比我還像新娘。我一直安慰自己蛉艾,他們只是感情好钳踊,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勿侯,像睡著了一般拓瞪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上助琐,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天祭埂,我揣著相機與錄音,去河邊找鬼弓柱。 笑死沟堡,一個胖子當著我的面吹牛,可吹牛的內容都是我干的矢空。 我是一名探鬼主播航罗,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屁药!你這毒婦竟也來了粥血?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酿箭,失蹤者是張志新(化名)和其女友劉穎复亏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缭嫡,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡缔御,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妇蛀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耕突。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖评架,靈堂內的尸體忽然破棺而出眷茁,到底是詐尸還是另有隱情,我是刑警寧澤纵诞,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布上祈,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏登刺。R本人自食惡果不足惜籽腕,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塘砸。 院中可真熱鬧节仿,春花似錦、人聲如沸掉蔬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽女轿。三九已至箭启,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛉迹,已是汗流浹背傅寡。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留北救,地道東北人荐操。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像珍策,于是被迫代替她去往敵國和親托启。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • 個人入門學習用筆記攘宙、不過多作為參考依據(jù)屯耸。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,472評論 1 37
  • Express 簡介 Express 是一個簡潔而靈活的 node.js Web應用框架, 提供了一系列強大特性幫...
    保川閱讀 2,016評論 0 24
  • 學習網址 Express 框架核心特性: 可以設置中間件來響應 HTTP 請求蹭劈。 定義了路由表用于執(zhí)行不同的 HT...
    飛魚_JS閱讀 1,571評論 0 5
  • 一:簡單的Node.js介紹簡單的說Node.js是運行在服務端的javascriptNode.js 是基于Chr...
    可樂_d001閱讀 353評論 0 1
  • 有個很好的消息 通神拿到四大的offer了铺韧,簡直替他高興壞了 念念不忘必有回響多矮,他做到了,我也可以的哈打,對吧塔逃! 晚上...
    紅心芭樂閱讀 277評論 0 0