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ù)庫的模塊