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)