node.js筆記

small_shadow發表於2020-09-28

node.js是什麼?

  1. node.js不是一門語言
  2. node.js不是庫,不是框架
  3. node.js是JavaScript執行時的環境
  4. 簡單來說就是node.js可以解析和執行JavaScript程式碼,跟瀏覽器很像。
  5. 以前只有瀏覽器可以解析執行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怎麼用

  1. List item
    – 先下載
    https://www.runoob.com/nodejs/nodejs-install-setup.html
    菜鳥教程寫的很清楚,按照步驟走就行了
  2. 寫程式碼的地方
    – 跟js程式碼一樣,用hbuilder,sumlime等都可以編輯
  3. 檢視結果的地方
    – 跟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

  1. 載入http核心模組

    var http = require(‘http’)

  2. 使用http.createServer()方法建立一個Web伺服器。返回一個Server例項
    var server = http.createServer()

  3. 註冊request請求事件。當客戶端請求過來,就會自動觸發伺服器的request請求事件,然後執行第二個引數,回撥處理第二個引數裡的回撥

    server.on(‘request’,gunction(){

    console.log(‘收到客戶端的請求了’)
    )}

  4. 繫結埠號,啟動伺服器(不被佔用的)

    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))
})

先到這,之後會繼續補充的

相關文章