node.js筆記
node.js是什麼?
- node.js不是一門語言
- node.js不是庫,不是框架
- node.js是JavaScript執行時的環境
- 簡單來說就是node.js可以解析和執行JavaScript程式碼,跟瀏覽器很像。
- 以前只有瀏覽器可以解析執行JavaScript程式碼,現在node.js可以脫離瀏覽器來執行
瀏覽器中的JavaScript
- EcmaScript
- DOM
- BOM
node.js中的JavaScript
- 沒有DOM、BOM
- 有EcamScript
- 服務端不處理DOM、BOM元素
- 在node這個JavaScript執行環境中為JavaScript提供了一些伺服器級別的操作API
例如檔案讀寫
網路服務的構建
http伺服器等。。
node.js特性
- event-driven 事件驅動
- non-blocking I/O model 非阻塞IO模型(非同步)
- lightweight and efficient 輕量和高效
- npm
– npm是世界上最大的開源庫生態系統
– 絕大多數JavaScript相關的包都存放在了npm上,這樣做的目的是為了讓開發人員更加方便的去下載使用
node.js怎麼用
- List item
– 先下載
https://www.runoob.com/nodejs/nodejs-install-setup.html
菜鳥教程寫的很清楚,按照步驟走就行了 - 寫程式碼的地方
– 跟js程式碼一樣,用hbuilder,sumlime等都可以編輯 - 檢視結果的地方
– 跟html不同,這個沒法直接在網頁中檢視,可以直接在js所在檔案shift加右鍵開啟命令列,然後輸入code+空行+要開啟的js檔案,就可以檢視結果了。也可以在終端檢視,也就是網頁中。
var http = require('http');
http.createServer(function (request, response) {
// 傳送 HTTP 頭部
// HTTP 狀態值: 200 : OK
// 內容型別: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 傳送響應資料 "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 終端列印如下資訊
console.log('Server running at http://127.0.0.1:8888/');
然後瀏覽器輸入127.0.0.1:8888可以看到hello world
注意:不要用node來命名,名字中不能有空格,不能有中文字
讀取檔案
瀏覽器中的JavaScript是沒有檔案操作能力的,但是node.js中的JavaScript具有檔案操作能力
fs是file-system的簡寫,就是檔案系統的意思
在node中如果想要操作檔案,就必須引入fs這個核心模組,這個模組提供了所有關於檔案操作的API
例如fs.readFile 就是來讀取檔案的
先引入:var fs = require(‘fs’);
fs.readFile(‘被讀檔案路徑’,function(error,data){
console.log(data.toString())
})
注意要toString,沒有的話讀出來的是二進位制,使用者沒法檢視
如果錯誤,error為null
可以
if(error){
console.log(錯誤提醒)
}else{
說明沒錯
}
阻塞程式碼例項
var fs = require(“fs”);
var data = fs.readFileSync(‘input.txt’);
console.log(data.toString());
console.log(“程式執行結束!”);
必須在讀取檔案完成後才能執行其他程式
非阻塞程式碼例項
var fs = require(“fs”);
fs.readFile(‘input.txt’, function (err, data) {
if (err) return console.error(err);
console.log(data.toString());});
console.log(“程式執行結束!”);
不需要等待檔案讀取完
第二個例項我們不需要等待檔案讀取完,這樣就可以在讀取檔案時同時執行接下來的程式碼,大大提高了程式的效能。
因此,阻塞是按順序執行的,而非阻塞是不需要按順序的,所以如果需要處理回撥函式的引數,我們就需要寫在回撥函式內。
頭部匯入
node提供了很多操作,這些操作進行前都必須引入相對應的頭部,類似於java引入包一樣
var os = require(‘os’)//獲取機器資訊的的
var http = require(‘http’)//操作網頁的
var path = require(‘path’)//用來操作路徑的
有了這些引入之後,就可以使用他的操作了
os.cpus()//獲取當前機器的cpu資訊
os.totalmem()//檢視當前機器的記憶體
path.extname()獲取括號內檔案的字尾
還有很多其他操作,之後遇到在慢慢補充。
http
-
載入http核心模組
var http = require(‘http’)
-
使用http.createServer()方法建立一個Web伺服器。返回一個Server例項
var server = http.createServer() -
註冊request請求事件。當客戶端請求過來,就會自動觸發伺服器的request請求事件,然後執行第二個引數,回撥處理第二個引數裡的回撥
server.on(‘request’,gunction(){
console.log(‘收到客戶端的請求了’)
)} -
繫結埠號,啟動伺服器(不被佔用的)
server.listen(3000,function(){
console.log('伺服器啟動成功了,可以通過http://127.0.0.1:3000/ 來訪問)
})
http接受資料
response物件有一個方法:write可以用來給使用者端傳送響應資料
write可以使用多次,但是最後一定要使用end來結束響應,要不然客戶端會一直等待
response.write(‘hello’)
esponse.write(‘world’)
告訴客戶端,我的話說完了,你可以呈現給使用者了
response.end()
瀏覽器顯示中文亂碼問題
var http = require('http');
http.createServer(function (request, response) {
response.end('hello 世界');
}).listen(8888);
// 終端列印如下資訊
console.log('Server running at http://127.0.0.1:8888/');
開啟瀏覽器顯示資訊:
hello 涓栫晫
很多時候都有亂碼情況,我們經常遇到,只需要知道node的修改方法寫在哪就行了
var http = require('http');
http.createServer(function (request, response) {
response.setHeader('Content-type','text/plain;charset=utf-8')//加入這行程式碼
response.end('hello 世界');
}).listen(8888);
// 終端列印如下資訊
console.log('Server running at http://127.0.0.1:8888/');
開啟瀏覽器顯示資訊:
hello 世界
plain指的是普通文字 如果返回的結果想被頁面渲染,text/html
var http = require('http');
http.createServer(function (request, response) {
response.setHeader('Content-type','text/plain;charset=utf-8')//加入這行程式碼
response.end('<a href="">點我</a>');
}).listen(8888);
// 終端列印如下資訊
console.log('Server running at http://127.0.0.1:8888/');
結果為一個可點選的a連結
Express
原生的http 在某些方面表現不足以應對我們的開發需求,所以我們就需要使用框架來加快我們的開發效率,框架
的目的就是提高效率,讓我們的程式碼更高度統一。
在Node中,有很多Web開發框架,我們這裡以學習express 為主。
安裝
npm i -S express 命令,安裝好後一個簡單示範:
//0,安裝
//1,引包
var express = require('express')
//2,建立伺服器應用程式,原來的http.createSeaver
var app = express()
app.get('/',function(req,res){
res.send('hello world')
})
app.listen(3000,function(){
console.log('app is running')
})
結果顯示hello world
公開資料夾
app.use('/public/',express.static('./public/'))
這樣使用者就可以直接訪問資料夾裡的內容
使用art-template模板引擎
1、安裝
npm install --save art-template
npm install --save express-art-template
2、配置
app.engine( 'html', require('express-art-template'))
3、使用
app.get('/admin',function(req,res){
res.render('user.html',{
name:'小影'
})
})
獲取post請求
在Express中沒有內建獲取表單POST請求體的API,這裡我們需要使用一個第三方包:body-parser.
安裝:
npm install --save body-parser
配置:
var express = require('require')
//引包
var bodyParser = require('body-parser')
var app = express()
//配置body-parser
//主要加入這個配置,req上就會多出來一個屬性:body
//可以直接通過req.body來獲取表單POST請求資料了
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())
app.use(function(req,res){
res.setHeader('Content-Type','text/plain')
res.write('you posted:\n')
res.end(JSON.stringify(req.body,null,2))
})
先到這,之後會繼續補充的
相關文章
- Node.js EventEmitter 筆記Node.jsMIT筆記
- Node.js 嚐鮮筆記Node.js筆記
- Node.js學習筆記Node.js筆記
- Node.js學習筆記(一)Node.js筆記
- Node.js學習筆記1Node.js筆記
- 筆記:Node.js Postgresql踩坑筆記Node.jsSQL
- <node.js學習筆記(2)>Node.js筆記
- <node.js學習筆記(1)>Node.js筆記
- 《Node.js實戰》學習筆記Node.js筆記
- Node.js開發筆記-12:vue元件小記Node.js筆記Vue元件
- 筆記:PostgreSQL 、Node.js 、函式計算筆記SQLNode.js函式
- Node.js學習筆記----day04Node.js筆記
- Node.js stream(流) 學習筆記(一)Node.js筆記
- 《Node.js開發指南》讀書筆記Node.js筆記
- node.js高階程式設計閱讀筆記Node.js程式設計筆記
- <node.js學習筆記(3)>url,fs,qs,cryptoNode.js筆記
- <node.js學習筆記(4)>stream和http模組Node.js筆記HTTP
- <node.js學習筆記(6)>koa-router,模組化Node.js筆記
- JavaScript學習筆記(四十八)——Node.js之ExpressJavaScript筆記Node.jsExpress
- 《深入淺出node.js》第四章——記憶體控制(筆記)Node.js記憶體筆記
- Node.js 學習筆記_20170924(持續更新…)Node.js筆記
- [學習筆記]在不同專案中切換Node.js版本筆記Node.js
- Node.js 設計模式 學習筆記 之 流程式設計Node.js設計模式筆記程式設計
- 一點感悟:《Node.js學習筆記》star數突破1000+Node.js筆記
- <node.js學習筆記(5)>koa框架和簡單爬蟲練習Node.js筆記框架爬蟲
- Node.js 程式碼閱讀筆記系列(0)Timer 的實現Node.js筆記
- Node.js 程式碼閱讀筆記系列 — process.nextTick() 的實現Node.js筆記
- Node.js學習日記7Node.js
- 印象筆記 --- 方法分享筆記筆記
- Node.js 2013年大事記Node.js
- 筆記筆記
- <node.js學習筆記(完)>pug,mongodb命令(之後是node的案例,一個部落格)Node.js筆記MongoDB
- CUUG筆記 ORACLE索引學習筆記筆記Oracle索引
- 主動筆記與被動筆記筆記
- 記一次 Node.js 原始碼分析Node.js原始碼
- 入門日記之安裝Node.jsNode.js
- Node.js 中記憶體洩漏分析Node.js記憶體
- 日誌庫 winston 的學習筆記 - 建立一個使用 winston 的 Node.js 應用筆記Node.js