express項目創建、連接mysql、jwt驗證

 

 

express 和 node 我就不介紹了因爲我也不知道怎麼介紹,別問,問就是不知道

1、創建項目,淘寶鏡像自己搞一下

mkdir dh-express
cd dh-express
cnpm init -y

2、自行安裝如下的東西

    "body-parser": "^1.19.0",
    "boom": "^7.3.0",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "express-jwt": "^5.3.1",
    "jsonwebtoken": "^8.5.1",
    "md5": "^2.2.1",
    "mysql": "^2.18.1",
    "nodemon": "^2.0.3"

3、創建 app.js

const express = require('express')
const router = require('./router')
const bodyParser = require('body-parser')
const cors = require('cors')
// 創建 express 應用
const app = express()
app.use(cors()) // 跨域用的
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
app.use('/', router)
// 使 express 監聽 9000 端口號發起的 http 請求
const server = app.listen(9000, function() {
  const { address, port } = server.address()
  console.log('Http Server is running on http://localhost:9000', address, port)
})

4、自行以下概念express基礎概念: 中間件、路由、異常處理

5、package.json

{
  "name": "express",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "nodemon app.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "boom": "^7.3.0",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "express-jwt": "^5.3.1",
    "jsonwebtoken": "^8.5.1",
    "md5": "^2.2.1",
    "mysql": "^2.18.1",
    "nodemon": "^2.0.3"
  }
}

6、nodemon.json 它的作用是監聽代碼文件的變動,當代碼改變之後,自動重啓。

{
    "restartable": "rs",
    "ignore": [
        ".git",
        ".svn",
        "node_modules/**/node_modules"
    ],
    "verbose": true,
    "execMap": {
        "js": "node --harmony"
    },
    "watch": [],
    "env": {
        "NODE_ENV": "development"
    },
    "ext": "js json"
}

7、創建 db 目錄,新建兩個文件:

config.js數據庫的配置: 

module.exports = {
    host: 'localhost',
    user: 'root',
    password: '123456',
    database:'test',
    port: 5321,
    multipleStatements: true//允許多條sql同時執行
}

index.js 操作數據庫的方法

const mysql = require('mysql');
const config = require('./config');

function connect() {
    return mysql.createConnection({
        host: config.host,
        user: config.user,
        password: config.password,
        database: config.database,
        port: config.port,
        multipleStatements: config.multipleStatements//允許多條sql同時執行
    })
}

function querySql(sql) {
    const conn = connect()
    return new Promise((resolve, reject) => {
        try {
            conn.query(sql, (err, results) => {
                if (err) {
                    reject(err)
                } else {
                    resolve(results)
                }
            })
        } catch (e) {
            reject(e)
        } finally {
            conn.end()
        }
    })
}

module.exports = {
    querySql
}

使用的方法就是

db.querySql('select * from order').then(res => {
  console.log(res)
})

8、jwt 驗證

一般我們實際開發中我們接口都要有個接口權限驗證

我說一下我遇到過的token放在哪裏了,我一般會放在sessionStorage,就是頁面窗口會話的,打開別的窗口就獲取不到了,如果你想打開別的窗口也可以獲取到就用cookie 或者 localStorage,這個具體的區別我就不說了,還有一點是我遇到過的,後臺幫你設置cookie,他們設置了http-only打了對勾,我們前端就不可以操作了,他們可以自己對比token變化哈哈,繼續說jwt

module.exports = jwt({
  secret: 'zidingyi', // 祕鑰自定義
  credentialsRequired: true
}).unless({
  path: [
    '/user/login' // 接口路由白名單不用做權限驗證
  ]
})

怎麼使用作爲中間件使用比如

const express = require('express')
const jwt = require('./jwt')
const router = express.Router()
router.use(jwt)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章