系統架構設計的四層抽象:
總體結構:
control(第四層:返回資料給到路由這邊,只關心資料及其處理,一般是和資料庫這邊互動)
model(資料模型:成功、失敗返回的資料格式等)
conf:配置
db
utils:工具
logs:日誌
session和redis
一、session不足:
解決:將session儲存在redis中
二、為何session適合用redis儲存
三、開啟redis服務:
開啟乙個 cmd 視窗 使用 cd 命令切換目錄到redis目錄下 執行
redis-server.exe redis.windows.conf
介面和前端聯調
nginx介紹
如何配置反向**:
要同時開啟對應的服務(占用不同埠):nodejs server服務8000埠(後端介面)、http-server服務8001埠(前端頁面)
監聽8080埠
反向**配置
nginx.conf
配置檔案:
location /
location /api/
通過訪問http://localhost:8080/index.html
即可
ps:nginx命令
構建流程
npm install -g express -generator
全域性安裝express命令安裝工具
express 專案名
npm install
安裝元件
npm start
啟動專案(伺服器)
npm i nodemon cross-env
寫自己的業務邏輯:
新建路由檔案,針對不同路由進行業務邏輯處理
相對於原生nodejs:
構建流程
npm install koa-generator -g
全域性安裝express命令安裝工具
koa2 專案名
npm install
安裝元件
npm i cross-env
npm run dev
啟動專案(伺服器)
相對於express和原生nodejs:
一、express中介軟體
function logincheck(req, res, next)
可以註冊多個中介軟體,依次執行
通過next()
的執行乙個乙個的往下串聯下乙個中介軟體
實現原理思路:
遇到http
請求,根據path
、method
判斷觸發哪些中介軟體
// 實現類似 express 的中介軟體
}// 中介軟體註冊和收集
use()
get()
post()
// 通過當前 method 和 url 來匹配當前路由可執行的中介軟體
match(method, url)
// 獲取 routes
let curroutes =
curroutes = curroutes.concat(this.routes.all)
curroutes = curroutes.concat(this.routes[method])
curroutes.foreach(routeinfo =>
})return stack
}// 核心的 next 機制
handle(req, res, stack)
}next()
}callback()
const url = req.url
const method = req.method.tolowercase()
const resultlist = this.match(method, url)
this.handle(req, res, resultlist)}}
listen(...args)
}// 工廠函式
module.exports = () =>
二、koa2中介軟體
await next();
ctx.body = 'hello world';
});
實現思路:
不涉及method
和path
的判斷
// 組合中介軟體
function compose(middlewarelist) catch (err)
}return dispatch(0)
}}class likekoa2
// 收集中介軟體列表
use(fn)
createcontext(req, res)
ctx.query = req.query
return ctx
}handlerequest(ctx, fn)
callback()
}listen(...args)
}module.exports = likekoa2
pm2
cnpm i pm2 -g
配置命令 啟動
npm run prd
常用命令
pm2配置檔案
包括程序數量、日誌檔案目錄等
修改pm2 啟動命令,重啟
訪問 server,檢查日誌檔案的內容(日誌記錄是否生效)
}
多程序
為何使用多程序
多程序和redis
Node實戰 1 入門
當web應用需要連線到資料庫 快取伺服器 檔案系統 應用伺服器或其他服務時,node.js便會大放異彩。但是另一方面,實際上它並不是那些需要做長時間精密計算的伺服器的最佳執行環境。因此,單程序 單執行緒的node模型在處理乙個給定的請求時,如果該請求需要花費大量的時間生成乙個複雜的密碼摘要或者處理影...
node實戰學習紀錄
1.url模組 2.querystring模組 序列化 querystring.stringify 第二個引數為可以替換 第三個引數為可以在後面增加東西 輸出結果為 name scott course jade course node from 此為沒增加引數的情況下 反序列化 querystrin...
node入門筆記
看了 node入門 有些疑難點記下來。在匯出模組的時候給出的 是這樣的 可以發現exports.start start 但是不知道哪乙個start是內部函式名哪乙個是外部引用的名字。做了如下修改 starrt 為內部函式名 star為外部呼叫的方法名 發現exports.外部呼叫名 內部函式名 關於...