外貿(mào)網(wǎng)站開(kāi)發(fā)公司百度上怎么發(fā)布信息啊
1.node是什么
Node是一個(gè)基于Chrome V8引擎的JS運(yùn)行環(huán)境。
Node不是一個(gè)獨(dú)立的語(yǔ)言、node不是JS框架。
Node是一個(gè)除了瀏覽器之外的、可以讓JS運(yùn)行的環(huán)境
Node.js是一個(gè)讓JS運(yùn)行在服務(wù)端的開(kāi)發(fā)平臺(tái),是使用事件驅(qū)動(dòng),異步非阻塞I/O,單線程,跨平臺(tái)的JS運(yùn)行環(huán)境;
不是運(yùn)行在瀏覽器上,而是運(yùn)行在服務(wù)器上
2.為什么要學(xué)習(xí)node
A. 打開(kāi)服務(wù)器的黑盒子
B. 企業(yè)需求
C. 大前端必備技能
D. 為了更好的學(xué)習(xí)前端框架
3.node能做什么
A. Web服務(wù)器(重點(diǎn))
B. 命令行工具
C. 網(wǎng)絡(luò)爬蟲(chóng):是一種按照一定的規(guī)則,自動(dòng)地抓取網(wǎng)站信息的程序
D. 桌面應(yīng)用程序開(kāi)發(fā)(VS Code)
4.node發(fā)展歷史
https://blog.csdn.net/stpan22/article/details/104466554
5.下載安裝
https://nodejs.org/zh-cn/download/
在安裝過(guò)程中,盡量不改變路徑
6.運(yùn)行node
6.1 找到安裝路徑法
雙擊node.exe
可以直接寫(xiě)js代碼
6.2 cmd法
A.win+r,輸入cmd,輸入node
B.運(yùn)行指定文件
C.在對(duì)應(yīng)路徑下,輸入cmd
6.3 REPL環(huán)境-集成終端
7.讀取文件
7.1 讀文件
穩(wěn)當(dāng)參考路徑:http://nodejs.cn/api/fs.html#fsreadfilepath-options-callback
語(yǔ)法結(jié)構(gòu):
fs.read(fd[, options], callback)
說(shuō)明:
A. fd:文件名或文件描述符
B. options:encoding 默認(rèn)值null
C. callback:function
? err:error
? Data
異步地讀取文件內(nèi)容
var fs = require('fs') --引入fs模塊fs.readFile('./file.txt', 'utf8', function (err, data) {console.log(err);console.log(data);
})
7.2 寫(xiě)文件
文檔參考地址
語(yǔ)法結(jié)構(gòu):
fs.writeFile(file, data[, options], callback)
// 寫(xiě)入操作-先讀取,再寫(xiě)入
var fs = require('fs')fs.readFile('./file.txt', 'utf8', function (err, data) {data += "hello world~"console.log(data);// 再寫(xiě)入fs.writeFile('./file.txt', data, function (err) {if (!err) {console.log('寫(xiě)入成功!');}})
})
8.http請(qǐng)求–請(qǐng)求路由
// 引入http核心模塊
var http = require('http');// 創(chuàng)建一個(gè)服務(wù)
var server = http.createServer();// req是誰(shuí)請(qǐng)求,什么時(shí)候請(qǐng)求,res響應(yīng)數(shù)據(jù)
server.on('request', function (req, res) {// 設(shè)置響應(yīng)頭信息,用于防止亂碼,以下兩句都可以防止亂碼// 第一種方式res.setHeader('Content-Type', 'text/plain;charset=utf-8')// 第二種方式// res.writeHead(200, {// 'content-type':"text/html;charset=utf-8"// })res.write('測(cè)試'); // 寫(xiě)入流res.write('hhhhhhhhh'); // 寫(xiě)入流res.end(); //響應(yīng),只要不寫(xiě)end,文本都可以輸出
})// 創(chuàng)建監(jiān)聽(tīng):請(qǐng)求會(huì)被轉(zhuǎn)化為二進(jìn)制,輸出也需要把二進(jìn)制進(jìn)行編譯
// 啟動(dòng)監(jiān)聽(tīng),設(shè)置一個(gè)端口號(hào),這個(gè)端口的取值返回0-65535
server.listen('9999');
console.log('服務(wù)器已啟動(dòng),監(jiān)聽(tīng)端口9999,請(qǐng)?jiān)L問(wèn)localhost:9999');
9.響應(yīng)一個(gè)完整的html頁(yè)面–請(qǐng)求html頁(yè)面
index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>響應(yīng)一個(gè)完整的html頁(yè)面</title>
</head>
<body><div>響應(yīng)一個(gè)完整的html頁(yè)面</div><h1>我是標(biāo)題</h1><b>我是b標(biāo)簽</b><img src="./imgs/yuhang.jpg" alt="">
</body>
</html>
index.js
// 導(dǎo)入模塊
var http = require('http');
var fs = require('fs');var server = http.createServer(); // 創(chuàng)建一個(gè)服務(wù)// 響應(yīng)
server.on('request', function (req, res) {// 當(dāng)出現(xiàn)亂碼// res.setHeader('Content-Type','text/plain;charset=utf-8'); // 只能加載文本res.setHeader('Content-Type', 'text/html;charset=utf-8'); // 如果想要加載html需要把plain修改為html// res.write('加載一段話1'); // 如果只寫(xiě) res.write(),那么會(huì)一直在運(yùn)行,必須寫(xiě)上end,相對(duì)較麻煩// res.end('加載一段話2'); // 也可以直接寫(xiě)在res.end()里面// 可以直接在end里面編寫(xiě),當(dāng)直接寫(xiě)html標(biāo)簽是無(wú)法識(shí)別,需要修改setHeader// res.end('寫(xiě)在end<b>里面的</b>一段話'); // 再end里面可以寫(xiě)html代碼,但是如果要寫(xiě)一段的html呢// 如果有很多html內(nèi)容,或者是一個(gè)界面都需要渲染的話,就用下面的方式,用讀取文件形式fs.readFile('./03index.html','utf8', function (err, data) {res.end(data)})
})// 加載端口
server.listen(5656, function () {console.log('端口localhost:5656,已啟動(dòng)...');
})
10.響應(yīng)一張圖片或是靜態(tài)資源–請(qǐng)求外部靜態(tài)資源
index.js
// 導(dǎo)入模塊
var http = require('http')
var fs = require('fs')var server = http.createServer() // 創(chuàng)建一個(gè)服務(wù)// 響應(yīng)
server.on('request', function (req, res) {// 防止亂碼res.setHeader('Content-Type', 'text/html;charset=utf-8')// 1.加載靜態(tài)網(wǎng)頁(yè),直接這樣讀取,是不能識(shí)別圖片和其他靜態(tài)資源的,這個(gè)時(shí)候,request 有一個(gè)非常重要的屬性 url// fs.readFile('./03index.html', 'utf8', function (err, data) {// res.end(data)// })// 2.返回request的url屬性// fs.readFile('./03index.html', 'utf8', function (err, data) {// console.log(req.url,'request.url');// res.end(data)// })// 3.綜合綁定if (req.url == '/') { // 靜態(tài)的html內(nèi)容fs.readFile('03index.html', function (err, data) {res.end(data)})} else { // 其他靜態(tài)外部資源// 注意,讀取圖片的時(shí)候,不能加字符集fs.readFile('.' + req.url, function (err, data) {res.end(data)})}
})// 加載端口
server.listen(5656, function () {console.log('端口localhost:5656已啟動(dòng)......');
})
11.仿apache/iis服務(wù)器加載文件資源
index.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>仿服務(wù)器資源</title>
</head><body><h1>Index Of</h1><table border="1" width="600"><thead><th>圖片</th><th>文件名稱</th><th>最后更改時(shí)間</th><th>大小</th><th>文件類型</th></thead><tbody id="tShow"></tbody></table>
</body>
<script>var xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {if (xhr.readyState == 4) {var data = JSON.parse(xhr.responseText);var content = '';for (var i = 0; i < data.length; i++) {content += "<tr>";if (data[i].type == "F") {content += "<td><img src='./imgs/1.jpg' width='50' /></td>"} else {content += "<td><img src='./imgs/2.jpg' width='50' /></td>"}content += "<td>" + data[i].uname + "</td>";content += "<td>" + data[i].mtime + "</td>";content += "<td>" + data[i].size + "</td>";content += "<td>" + (data[i].type == "F" ? "文件" : "文件夾") + "</td>";content += "</tr>";}document.querySelector('#tShow').innerHTML=content;}}xhr.open('get', './file_list');xhr.send();
</script></html>
index.js
var http = require('http');
var fs = require('fs');
var moment=require('moment');var server = http.createServer();//響應(yīng)
server.on('request', function (request, response) {//防止亂碼response.setHeader('Content-type', "text/html;charset=utf-8");//普通html文檔if (request.url == '/') {fs.readFile('3.index.html', function (err, data) {response.end(data);})}else if (request.url == '/file_list') {fs.readdir('./', 'utf8', function (err, data) {//1.因?yàn)閐ata返回的數(shù)據(jù)是數(shù)組,需要轉(zhuǎn)化為json//response.end(JSON.stringify(data));//返回的這種數(shù)據(jù),暫時(shí)不符合我們的要求//2.讀取完名字后要獲得其他屬性,返回的形式[{uname,size,time,type},{},{}],要定義返回一個(gè)數(shù)組var data_arr = [];//數(shù)組里面存放的對(duì)象,一個(gè)文件就是一個(gè)對(duì)象var count = 0;//計(jì)數(shù)器for (var i = 0; i < data.length; i++) {data_arr[i] = {};(function (i) {//獲取其他屬性fs.stat(data[i], function (err1, data1) {count++;if (data1.isFile()) {data_arr[i].type = "F";} else {data_arr[i].type = "FN";}data_arr[i].uname = data[i];data_arr[i].size = data1.size;data_arr[i].mtime = moment(data1.mtime).format('YYYY-MM-DD hh:mm:ss');//判斷什么時(shí)候返回if(count==data.length){response.end(JSON.stringify(data_arr));}})})(i)}})}else {//其他資源fs.readFile('.' + request.url, function (err, data) {response.end(data);})}
})//端口
server.listen(1234, function (err, data) {console.log('端口1234正在啟動(dòng).....');
});
上述代碼注意閉包!
11.1 引用時(shí)間模塊
npm install moment;–第三方模塊
12.json數(shù)據(jù)
12.1 什么是JSON
概念:JSON的英文全稱是JavaScript Object Notation,即”JavaScript對(duì)象表示法”。簡(jiǎn)單來(lái)講,JSON就是JavaScript對(duì)象和數(shù)組的字符串表示法,它使用文本表示一個(gè)JS對(duì)象或數(shù)組的信息,因此JSON的本質(zhì)是字符串
作用:JSON是一種輕量級(jí)的文本數(shù)據(jù)交換格式,在作用上類似于XML,專門(mén)用于存儲(chǔ)和傳輸數(shù)據(jù),但是JSON比XML更小、更快、更易解析。
現(xiàn)狀:JSON是在2001年開(kāi)始被推廣和使用的數(shù)據(jù)格式,到現(xiàn)今為止,JSON已經(jīng)稱為了主力的數(shù)據(jù)交換格式。
12.2 JSON的兩種結(jié)構(gòu)
JSON就是用字符串來(lái)表示JS的對(duì)象和數(shù)組。所以,JSON中包含對(duì)象和數(shù)組兩種結(jié)構(gòu),通過(guò)這兩種結(jié)構(gòu)的相互嵌套,可以表示各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)
A.對(duì)象結(jié)構(gòu)
對(duì)象結(jié)構(gòu)在JSON中表示為{}括起來(lái)的內(nèi)容。數(shù)據(jù)結(jié)構(gòu)為{key:value,key:value…}的鍵值對(duì)結(jié)構(gòu)。其中,key必須是使用英文的雙引號(hào)包裹的字符串,value的數(shù)據(jù)類型可以是數(shù)字、字符串、布爾值、null、數(shù)組、對(duì)象6種類型
//這是一個(gè)對(duì)象
var obj = { a: 'hello', b: 'world' }//這是一個(gè)json,本質(zhì)是字符串
var json = '{"a":"hello","b":"world"}'console.log(obj);
console.log(json);
B.數(shù)組結(jié)構(gòu)
數(shù)組結(jié)構(gòu)在JSON種表示為[]括起來(lái)的內(nèi)容。數(shù)據(jù)結(jié)構(gòu)為[“java”,”javascript”,30,true…]。數(shù)組種的數(shù)據(jù)的類型可以是數(shù)字、字符串、布爾值、null、數(shù)組、對(duì)象六種類型。
12.3 JSON語(yǔ)法注意事項(xiàng)
A. 屬性名必須使用雙引號(hào)包裹
B. 字符串類型的值必須使用雙引號(hào)包裹
C. JSON中不允許使用單引號(hào)表示字符串
D. JSON中不能寫(xiě)注釋
E. JSON的最外層必須是對(duì)象或數(shù)組格式
F. 不能使用undefined或函數(shù)作為JSON的值
JSON的作用:在計(jì)算機(jī)與網(wǎng)絡(luò)之間存儲(chǔ)和傳輸數(shù)據(jù)
JSON的本質(zhì):用字符串來(lái)表示JS對(duì)象數(shù)據(jù)或數(shù)組數(shù)據(jù)
12.4 json和js對(duì)象的互轉(zhuǎn)
要實(shí)現(xiàn)從JSON字符串轉(zhuǎn)化為JS對(duì)象,使用JSON.parse()方法:字符串->對(duì)象
var json='{"a":"hello","b":"world"}'
var obj=JSON.parse(json);
console.log(obj);
要實(shí)現(xiàn)從JS對(duì)象轉(zhuǎn)化為JSON字符串,使用JSON.stringify()方法:對(duì)象->字符串
var temp=JSON.stringify(obj)
console.log(typeof(temp));
12.5 序列化和反序列化
把數(shù)據(jù)對(duì)象轉(zhuǎn)化為字符串的過(guò)程,叫做序列化,例如:調(diào)用JSON.stringify()函數(shù)的操作,叫做JSON序列化
把字符串轉(zhuǎn)化為數(shù)據(jù)對(duì)象的過(guò)程,叫做反序列化,例如:調(diào)用JSON.parse()函數(shù)的操作,叫做JSON反序列化