【Nodejs】探索 Node.js、NPM和 Express

更新於 發佈於 閱讀時間約 16 分鐘

這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭QQ)

終端機運行指令為:

node app.js
  • 這邊給的代碼。當使用者瀏覽時(這邊因為是單機作業,就是127.0.0.1:3000),等同於對這個伺服器發送了一個請求,那終端機中會輸中請求的一些相關資訊:
// TODO:取得request資訊
const http = require("http");
const server = http.createServer((request, response) => {
console.log(response.url, response.method, response.headers);

});
server.listen(3000);
  • 取得請求後,伺服器會依據請求給予其回覆。以下示範,在伺服器被訪問時,發送出回覆的一種方式:

這邊的操作,在網頁被瀏覽時,會帶出HTML<p>node test</p>

// TODO:處理require
const http = require("http");
const server = http.createServer((request, response) => {
response.write('<html lang="en">');
response.write(
' <head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head>'
);
response.write("<body><p>node test</p></body>");
response.write("</html>");
response.end();
});
server.listen(3000);

這邊的操作,在網頁被瀏覽時,會帶出button跟input

const http = require("http");
const server = http.createServer((request, response) => {
const url = request.url;
console.log(url);
response.write(
'<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head>'
);
response.write(
'<body><form method="get" action="/getMsg"><input type="text" name="msg" id="" /><input type="submit" value="submit" /></form></body>'
);
response.end();
});
server.listen(3000)



NPM(Node Package Manager)

接著我們要來談談,npm跟模塊(package)之間的關係:

在node中有三種模塊的方式:

  1. nodejs 自帶核心模塊 -> http, https, path, os
  2. 用戶自訂義模塊
  3. npm
raw-image

NPM 是 Node Package Manager 的簡稱,它是一個線上套件庫,可以下載各式各樣的 Javascript 套件來使用。

在以前呀,我們需要套件的時候,就得額外到套件的官網,下載,在裝到自己正在用的專案當中,哩哩摳摳,有時候再給你一個環境建置小紅自,直接讓你心態炸裂(這就是傳說中的寫程式入門到放棄嘛~)為了讓我們這些小菜雞不要還妹入門就直接放棄,世界上的大大們幫我們整理好套件,那我們只需要下指令,就一鍵安裝摟(天啊寫程式的人好暖,暈爛暈爛~)

但要記得,要先安裝nodejs才能使用歐!

npm安裝指令:

npm init
npm install

安裝成功的話,你就會看到你得專案多了這些三個檔案:

raw-image

有看到的話,在npm這一部分就安裝成功啦~

那接下來,介紹一個大家壹定會安裝的套件


nodemon

指令:npm install -g nodemon
啟動;nodemon 檔案

之前我們只要啟動終端機後,如果有更改裡面內容,就需要重啟終端機,再重新訪問,正在開發階段必須一直修修改改並且頻繁地測試內容,真的有點搞剛。

raw-image
nodemon is a tool that helps develop Node.js based applications by automatically restarting the node application when file changes in the directory are detected.

那如果有起動成功,就會出現下面著個畫面:

raw-image

Express

官網:https://expressjs.com

指令:npm i express

接下來介紹的express,先看GPT大大是如何解釋他:

Express 是一個流行的 Node.js Web 應用程序框架,它簡化了構建 Web 和 API 服務器的過程。它提供了一組強大的功能和工具,使開發者能夠更輕松地創建高性能、可擴展且易於維護的 Web 應用程序。

Express 提供了許多功能,包括:
1. 路由管理
2. 中間件(middleware)(可以在請求和響應之間執行一些操作)
3. RESTful API 構建
Express 提供了一個強大且靈活的框架,使得 Node.js 開發者能夠輕松構建各種類型的 Web 應用程序和服務。它是 Node.js 社區中最受歡迎和廣泛使用的 Web 框架之一。

總之,可以知道他是一個很棒棒的框架!那我們就來看看這個棒棒的框架如何使用吧。

// TODO: express 基本寫法
const express = require('express')
const app = express()

app.get('/', function (req, res) {
res.send('Hello World')
})

app.listen(3000)

這一段代碼中,我們可以得知兩件事:

在res中的res.write()跟res.end()在express中由res.send()取代

看到那個app.get(),他的名字叫middleware。


Middleware

那Middleware再請GPT大大開示:

Middleware(中間件)是在 Express 框架中用於處理請求和響應的函數。它可以訪問請求對象(`req`)、響應對象(`res`)以及應用程序中的下一個中間件函數(`next`)。中間件在請求處理過程中執行一些操作,然後可以決定是將請求傳遞給下一個中間件,還是結束請求-響應周期。

在 Express 中,中間件可以用來執行各種任務,例如:
1. 處理路由:根據不同的請求路徑,使用不同的中間件來處理不同的邏輯。
2. 記錄請求日志:記錄請求的信息,如請求時間、請求路徑、請求方法等。
3. 身份驗證和授權:驗證用戶身份,授權用戶訪問特定的資源。
4. 數據處理:解析請求體,處理表單數據、JSON 數據等。
5. 錯誤處理:捕獲和處理請求處理過程中的錯誤。

在 Express 中,中間件可以通過 `app.use()` 或類似的方法添加到應用程序中。例如,`app.use(middlewareFunction)` 將一個中間件函數添加到請求-響應處理管道中。多個中間件可以按順序添加,請求將依次通過每個中間件。

這裡可以大概知道,當伺服器運作時,middleware就承攬著伺服器要做的每一個動作。

app.use('/', function (req, res) {
res.send('Hello World')
})
raw-image

那這邊可以看到app後面可以接很多東西,其中的app.post(),app.get()分別接收POST跟GET的方法。














在express中使用get方法:

get方法搭配的是req.query()

// TODO: route -> 在表單中使用get
const express = require("express");
const http = require("http");

const app = express();

// 顯示表單
// form method="get" action="/result "
app.use("/add", (req, res, next) => {
res.send(
'<body><form method="get" action="/result"><input type="text" name="msg" id="" /><input type="submit" value="submit" /></form></body>'
);
next();
});

app.use("/result", (req, res, next) => {
console.log(req.query); //{ msg: 'qew' }
next();
});
app.use("/", (req, res, next) => {
res.send("<h1>this is root page. </h1>");
next();
});

const server = http.createServer(app);
server.listen(3000);


在express中使用post方法:

express本身並沒有提供使用post方法,所以要另外下載body-parser

下載指令 :$ npm install body-parser

post方法搭配的是req.body()

// TODO: route -> 在表單中使用post
// express本身不支援post,需要在額外使用bodyParser
const bodyParser = require("body-parser");
const express = require("express");
const http = require("http");
const adminRouters = require("./router/admin");
const shopRouters = require("./router/shop");
const app = express();

app.use(bodyParser.urlencoded({ extended: false }));

router.use("/add", (req, res, next) => {
res.send(
'<body><form method="post" action="/result"><input type="text" name="msg" id="" /><input type="submit" value="submit" /></form></body>'
);
next();
});
router.use("/result", (req, res, next) => {
console.log(req.body); //{ msg: 'wer' }
res.send(req.body.title);
next();
});


router.use("/", (req, res, next) => {
res.send("<p>11111</p>");
res.send("<h1>this is root page. </h1>");
next();
});

// 404 not found
app.use((req, res, next) => {
res.status(404).send(<p>pages not found</p>);
});

const server = http.createServer(app);
server.listen(3000);

Express application generator

目前,加上【Nodejs】淺談網頁開發中的模板語言:Pug 和 EJS 這篇(還沒看的趕緊過去看XD),稍微都有提到基本的環計建置了。那接下來再提一個基於官方幫我們建置好的框架Express generator

raw-image

還是要先安裝Express generator拉~

指令:npm install -g express-generator

根據他給的提示下創建指令

raw-image

那像我的話,因為要使用的模板語言是ejs,所以指令為:

express -e express-generator-1

就等他幫你創建好摟~


🥰以上是本文所分享的內容。如果您發現任何錯誤或遺漏,請不吝賜教。







留言
avatar-img
留言分享你的想法!
avatar-img
W. C. Chen的沙龍
4會員
10內容數
W. C. Chen的沙龍的其他內容
2024/03/27
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
2024/03/27
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
2024/03/25
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
2024/03/25
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
2023/08/29
啊,,,,,是這個樣子的,這是我今正在做的東西, 目前做到的進度是, unity醬可以上下左右,搭配上timeline預先設定好路線,創造出往前樣子,那第一次寫發射砲彈的東西,就來記錄一下。 子彈(粒子效果) 這邊我還很爛QQ,但網路上有推薦文章,這篇真的介紹的很詳細: Unity Part
Thumbnail
2023/08/29
啊,,,,,是這個樣子的,這是我今正在做的東西, 目前做到的進度是, unity醬可以上下左右,搭配上timeline預先設定好路線,創造出往前樣子,那第一次寫發射砲彈的東西,就來記錄一下。 子彈(粒子效果) 這邊我還很爛QQ,但網路上有推薦文章,這篇真的介紹的很詳細: Unity Part
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
Thumbnail
Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
Thumbnail
安裝完成 nodejs 後選用一個工作目錄執行 npm init,npm 會產生一個 package.json 檔案,之後為此專案安裝套件時都會記錄在此,讓專案可以很容易的重建和移植,也可設定 npm start 執行時以哪一個 js 檔當作系統入口。直接開寫了,以下我用 app.js 當作系統入口
Thumbnail
安裝完成 nodejs 後選用一個工作目錄執行 npm init,npm 會產生一個 package.json 檔案,之後為此專案安裝套件時都會記錄在此,讓專案可以很容易的重建和移植,也可設定 npm start 執行時以哪一個 js 檔當作系統入口。直接開寫了,以下我用 app.js 當作系統入口
Thumbnail
👨‍💻 簡介 最近想要透過小實作來撰寫筆記,達到做中學的效果,因此就來實作個小爬蟲順便結合前面學到的package做一個小複習。
Thumbnail
👨‍💻 簡介 最近想要透過小實作來撰寫筆記,達到做中學的效果,因此就來實作個小爬蟲順便結合前面學到的package做一個小複習。
Thumbnail
NodeJS作用? NodeJS 作為一個後端程式語言,與伺服器交互,能夠開發服務器應用、開發工具類應用,例如:Webback、Vite 這些好用工具,或是透過NodeJS的electron框架開發桌面端應用,而常見的桌面端應用如 VScode
Thumbnail
NodeJS作用? NodeJS 作為一個後端程式語言,與伺服器交互,能夠開發服務器應用、開發工具類應用,例如:Webback、Vite 這些好用工具,或是透過NodeJS的electron框架開發桌面端應用,而常見的桌面端應用如 VScode
Thumbnail
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
Thumbnail
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News