1. 程式人生 > >Node.js —— 兩種方式傳送單頁面

Node.js —— 兩種方式傳送單頁面

1、安裝socket.io和express和生成package.json

npm install socket.io --save
npm install --save express
nam init

2、app.js

const express = require('express');  
const app = express();               // 建立一個express程式,賦值給app。
const fs = require('fs');            // 這個是node的檔案讀取模組,用於讀取檔案
const path = require('path');        // 這是node的路徑處理模組,可以格式化路徑
app.listen(3000,()=>{                // ()=>是箭頭函式,ES6語法,相當於 function()
    console.log("server running at 127.0.0.1:3000");       // 監聽3000埠,然後執行回撥函式在控制檯輸出。
});
 
/**
 * app.get(): express中的一箇中間件,用於匹配get請求,所謂中介軟體就是在該輪http請求中依次執行的一系列函式。
 * '/': 它匹配get請求的根路由 '/'也就是 127.0.0.1:3000/就匹配到他了
 * (req,res): ES6語法的箭頭函式,你暫時可以理解為function(req,res){}。
 * req帶表瀏覽器的請求物件,res代表伺服器的返回物件
 */
app.get('/',(req,res)=>{
    res.redirect('/chat.html');       // express的重定向函式。如果瀏覽器請求了根路由'/',瀏覽器就給他重定向到 '127.0.0.1:3000/chat.html'路由中
});

第一種傳送方式

app.get('/chat.html',function (req,res) {
    fs.readFile(path.join(__dirname,'/chat.html'),function(err,data){       //讀取檔案,readFile裡傳入的是檔案路徑和回撥函式,這裡用path.join()格式化了路徑。
        if(err){
            console.error("讀取chat.html發生錯誤",err);                    //錯誤處理
            res.send('4 0 4');                                           //如果發生錯誤,向瀏覽器返回404
        } else {
            res.end(data);                  //這裡的data就是回撥函式的引數,在readFile內部已經將讀取的資料傳遞給了回撥函式的data變數。
        }                                    //我們將data傳到瀏覽器,就是把html檔案傳給瀏覽器
    })
});

第二種傳送方式

/**
 * __dirname表示當前檔案所在的絕對路徑,所以我們使用path.join將app.js的絕對路徑和public加起來就得到了public的絕對路徑。
 * 用path.join是為了避免出現 ././public 這種奇怪的路徑
 * express.static就幫我們託管了public資料夾中的靜態資源。
 * 只要有 127.0.0.1:3000/XXX/AAA 的路徑都會去public資料夾下找XXX資料夾下的AAA檔案然後傳送給瀏覽器。
 */
app.use('/',express.static(path.join(__dirname,'./public')));