基於nodejs的express常用模塊介紹及使用

常用模塊安裝

基於express項目中需要另外引入的模塊,其他的在我們創建項目時自動添加的我這裏就沒介紹

# i是install的縮寫,刪除時可以使用un代替i,un既是uninstall的縮寫
npm i -g nodemon            # 這個安裝爲全局,用來解決實時刷新頁面,實現node服務器與數據庫服務器的重啓

npm i multer                #  安裝編寫上傳文件接口需要的模塊

npm i bcryptjs              #  安裝密碼加密需要的模塊

npm i jsonwebtoken          #  安裝服務器端傳送token需要的模塊

npm i express-jwt           #  安裝驗證token存不存在需要的模塊

npm i cors                  #  安裝服務器端解決跨域需要的模塊

npm i moment                #  安裝日期格式化需要的模塊

npm i mongoose              #  安裝使用mongoDB數據庫需要的模塊

npm i body-parser           #  安裝解決上傳文件大小受限需要的模塊

npm i cheerio               #  實現服務器端操作DOM

# 非常常用,內部封裝了ajax,通常也是用來發送四種方式的請求,
# get,post,put,delete(這種方式沒有數據,只有一個參數url,傳參時要在url後面進行拼接)
npm i axios                

常用模塊介紹及使用

nodemon

在node環境中,改變js文件要重新執行頁面纔會有變化。
nodemon是監聽nodejs代碼變化的工具,會自動完成node服務器與數據庫服務器的重啓

在這裏插入圖片描述
使用如上圖,就是在package.json文件中的scripts對象中加上"serve": "nodemon ./bin/www",這段代碼的對象名是自己命名的,運行時就執行npm run serve這個命令就可以了,其實執行的就是後面的這個對象值,我們直接輸入nodemon ./bin/www也可以運行程序。

multer

Multer 是一個 node.js 中間件,用於處理 multipart/form-data 類型的表單數據,它主要用於上傳文件。它是寫在 busboy 之上非常高效。
Multer 只會處理 multipart/form-data 類型的表單數據。服務器端寫接口具體用法如下:

const multer = require('multer'); // 引入模塊

# 配置當前上傳文件的路徑信息
var storage = multer.diskStorage({
   # 表示文件在服務器端的存儲路徑
   destination: function (req, file, cb) {
       cb(null, './public/avatars')
   },
   # 上傳之後的文件名
   filename: function (req, file, cb) {
       cb(null, file.fieldname + '-' + Date.now() + file.originalname);
   }
})

var upload = multer({ storage: storage });

# single中的參數表示file的name屬性, 解析formData數據
router.post("/upload_files", upload.single('img'), (req, res) => {

   # 輸出設置,我這裏是把文件鏈接返回給前端了,
   res.json({
       msg: "上傳成功",
       info: "http://192.168.18.3:8000/avatars/" + req.file.filename,
   });
});

前端需要通過這個接口先把formdata中存儲的文件數據信息傳送過來,前端只能發送formdata類型的數據,因爲multer只會處理 multipart/form-data 類型的表單數據

bcryptjs

bcryptjs是一個第三方密碼加密庫,是對原有bcrypt的優化,優點是不需要安裝任何依賴,用法如下:

const bcrypt = require('bcryptjs'); // 引入密碼加密模塊

bcrypt.hashSync(params); # 使用這個方法對前端傳過來的密碼進行同步加密處理,裏面的參數就是前端傳來的密碼數據

 # 驗證密碼是否相同,第一個參數是傳過來的密碼,第二個是數據庫存的密碼
var isValidate = bcrypt.compareSync(params, params1);

jsonwebtoken

jwt 全稱是Json Web Token,它是一種數據加密技術,是目前比較流行的令牌數據加密方案,服務器端可以返回給前端一個token用作以後的判斷,用法如下:

const jwt = require('jsonwebtoken'); # 首先引入創建token的模塊

# 第一個是把什麼數據當作token,是個對象,第二個是密鑰,自己設定,第三個是token過期時間,也是自己設定
# 10h就是十個小時,1day就是一天
# sign是生成token
const token = jwt.sign({params}, tokenKey,
     {
         expiresIn: '10h'
     });

# 解析token,返回值是token數據對象,第一個參數是前端傳來的token,第二個參數是自己設置的密鑰,
# 如果之前設置token數據用的是id,那麼通過tokenData.id就可以取到設置token用的id值
const tokenData = jwt.verify(authorization, tokenKey);

express-jwt

express-jwt是nodejs的一箇中間件,他來驗證指定http請求的JsonWebTokens的有效性,如果有效就將JsonWebTokens的值設置到req.user裏面,然後路由到相應的router。 此模塊允許您使用Node.js應用程序中的JWT令牌來驗證HTTP請求。 JWT通常用於保護API端點。

express-jwt內部引用了jsonwebtoken,對其封裝使用。 在實際的項目中這兩個都需要引用,他們兩個的定位不一樣。jsonwebtoken是用來生成token給客戶端的,express-jwt是用來驗證token的。

用法如下:

# 引入token驗證模塊,用來在express中驗證jwt有沒有存在
const jwtMiddle = require('express-jwt');

# 查看和修改用戶信息時需要驗證密鑰,這樣執行下面的路由查找時都要先驗證token,token不存在就不會執行下面編寫的路由,因此在express腳手架中通常寫在路由封裝的文件中即創建項目自動生成的app.js文件
app.use(
  jwtMiddle({
    secret: tokenKey,
  })
);

app.use('/api/userMsg', require('./routes/api/userMsg'));

cors

cors是後端即服務器端常用來解決跨域的一種方式,具體介紹及使用可以參考nodejs中解決跨域方法

moment

用來解析建數據庫時自動生成的日期,用於日期格式化,可以查看moment.js插件文檔

用法如下:

# 主路由引入纔可以在html頁面中利用方法進行日期格式化,
app.locals.moment = require('moment')

# 但是如果不是在頁面中直接使用方法,就是在哪使用在哪引入文件
const moment = require('moment')

# 第一個參數是傳進的時間數據,format是把傳進的時間格式化成什麼類型的,這裏是2020-10-03 4:34:34這種類型的,這是常用的方法
moment(v).format('YYYY-MM-DD h:mm:ss')

mongoose(數據庫模塊)

Mongoose是在node.js異步環境下對mongodb進行便捷操作的對象模型工具

用法如下:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

# 連接數據庫,在express腳手架中通常寫在app.js文件中,DB是數據庫名,自己定義,第二個參數加上不會出現一些警告,不加也沒事
mongoose.connect("mongodb://localhost:27017/DB", { useUnifiedTopology: true, useNewUrlParser: true })
  .then((res) => { console.log("數據庫連接成功"); })
  .catch((err) => {
    console.log(err);
  });

# 創建數據庫的數據結構,參數就是字段名,最裏面是限定字段條件
const cartSchema = new Schema({
    GoodsId: {
        type: Number,
        required: true,
    },
    GoodsToken: {
        type: String,
        required: true,
    },
    GoodsImg: {
        type: String,
        // required: true,
    },
    GoodsTitle: {
        type: String,
    },

    # 商品數量
    GoodsNum: {
        type: Number,
    },

    # 單個產品價格
    GoodsPrice: {
        type: Number,
    },
}, { timestamps: true } # // 加上這第二個參數數據庫表在新增或修改數據時自動往表中提供一個時間戳createdAt和updatedAt
); 

# 創建一個實例表對象,第一個參數是表名,第二個就是創建的數據庫中的表結構實例對象
const Cart = mongoose.model('carts', cartSchema);

module.exports = Cart;

# 使用表時要先引入,使用自己創建的哪個表就引入哪個,多個表的關聯可以使用id進行,具體看情況
const Cart = require('../../models/cart');

# 保存到數據庫很簡單,就是調用save()方法就好
Cart.save()

# 操作數據庫方法,前面使用promise方法,儘量都加上await,但是async也不能少,具體操作看情況
Cart.find()  # 參數也是個對象,根據條件查找

# 兩個參數,可以不是對象,第一個是查找條件,這個就是根據id查找的,第二個是修改的數據,這就要求前端輸入框的name屬性必須跟字段名一樣
# 不需要修改的數據,可以用delete刪掉,再執行下面這句,就可以直接更新數據庫表中的一些信息
Cart.findByIdAndUpdate(params,params1) 

Cart.findOneAndDelete(params)  #參數是個條件對象,根據條件刪除表中的一些數據,篩選條件可以多寫

body-parser

body-parser是一個HTTP請求體解析的中間件,使用這個模塊可以解析JSON、Raw、文本、URL-encoded格式的請求體,用這個模塊可以改變express框架默認的上傳文件大小1Mb

具體使用參看上傳文件大小受限的解決辦法

cheerio

cheerio是jquery核心功能的一個快速靈活而又簡潔的實現,主要是爲了用在服務器端需要對DOM進行操作的地方

var cheerio = require('cheerio'),

# 這樣就像在使用jQuery的$方法
$ = cheerio.load('<h2 class = "title">Hello world</h2>');

$('h2.title').text('Hello there!');
$('h2').addClass('welcome');

$.html();
# => <h2 class = "title welcome">Hello there!</h2>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章