因爲不少朋友對於我上一篇寫的CMS系統中後臺node部分的啓動有些不太理解的地方或者存在一些問題,這裏我會專門寫一下啓動的步驟和細節,關於CMS全棧系統感興趣的朋友能夠看看我以前寫的兩篇文章:javascript
1.基於nodeJS從0到1實現一個CMS全棧項目(上)css
2.基於nodeJS從0到1實現一個CMS全棧項目(中)前端
本文主要介紹以下內容:vue
文章很短,但願你們能夠更好的進行後面node和前端部分的開發。java
咱們能夠去redis官網下載redis安裝程序,我主要介紹window和 linux系統下的安裝,若是你是其餘系統,能夠去官網查看相關資料。node
下載地址:github.com/MSOpenTech/…react
Redis 支持 32 位和 64 位。這個須要根據你係統平臺來選擇,下載壓縮包到 C 盤,解壓而後將文件夾重命名爲 redis。(這裏方便記憶)linux
redis-server.exe redis.windows.conf
複製代碼
輸入以後,若是顯示以下界面,說明啓動成功:css3
這樣啓動尚未完,若是咱們想測試redis是否能夠執行,咱們上面啓動的cmd窗口千萬不能關,不然咱們跑node將會出現以下報錯:nginx
好了,咱們繼續,測試一下redis是否可用。首先咱們新建一個cmd窗口,切換到 redis 目錄下運行:
redis-cli.exe -h 127.0.0.1 -p 6379
複製代碼
設置鍵值對:
set user xxx
複製代碼
則會出現以下結果:
這樣,redis啓動這塊就能夠了。
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make
複製代碼
make完後 redis-2.8.17目錄下會出現編譯後的redis服務程序redis-server,還有用於測試的客戶端程序redis-cli,兩個程序位於安裝目錄 src 目錄下,下面啓動redis服務:
$ cd src
$ ./redis-server
複製代碼
而後下面使用redis-cli的方式和window相似,這裏就不舉例子了,若是想詳細瞭解redis的配置和啓動,請認真研讀redis官方文檔。
關於node的編譯和配置我在上一篇也簡單講了一下,這裏咱們具體介紹如何啓動項目和打包線上和發開環境代碼。
首先咱們看看package.json的執行代碼:
"scripts": {
"start": "export NODE_ENV=development && nodemon -w src --exec \"babel-node src\"",
"build": "babel src --out-dir dist",
"run-build": "node dist",
"test": "echo \"Error: no test specified\" && exit 1"
}
複製代碼
咱們先看start,這裏主要用來啓動咱們開發環境的服務器,咱們經過export NODE_ENV=development來定義開發環境的環境變量,因爲我採用的是mac電腦,因此能夠用export來定義一個node環境變量;
window下咱們採用set NODE_ENV=development來定義。咱們用以下指令來啓動:
npm start
// or yarn start
複製代碼
其次咱們看看build命令,主要是打包輸出的命令,dist爲輸出的目錄名,你也能夠根據本身代碼風格來命名。
咱們執行以下來打包:
npm run build
// or yarn build
複製代碼
run-build命令是我額外加的,主要是方便測試生產環境的代碼,即咱們打包的後代碼。執行方式同上。
關於如何使用環境變量,這裏咱們能夠參考我項目中的config下的代碼:
const isDev = process.env.NODE_ENV === 'development';
//獲取本機ip地址
function getIPAdress() {
var interfaces = require('os').networkInterfaces();  
for (var devName in interfaces) {    
var iface = interfaces[devName];      
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
return alias.address;
}
}  
}
}
const IP = getIPAdress();
const staticPath = isDev ? `http://${IP}:3000` : '線上地址';
module.exports = {
isDev,
staticPath
}
複製代碼
咱們可使用process.env.NODE_ENV來拿到咱們在package下定義的環境變量,而後進行不一樣的操做。以上代碼主要做用就是下其餘業務代碼傳遞環境變量,並對靜態路徑根據不一樣環境使用不一樣的ip地址,方便先後端調試。
當咱們啓動好服務器後,咱們能夠利用ip去測試端口,因爲咱們初始化時會初始化config和admin數據,因此咱們可使用postman來測試接口可靠性,爲了方便理解,我會剖出初始化代碼,若是有不理解的,能夠可和交流。
// server/src/db/schema/config.js
// ...
// 初始化config數據
async function initConfig(){
const isExist = await configSchema.exists()
if(!isExist) {
const result = await configSchema.hmset(null, {
header: {
columns: ['首頁'],
height: '50',
backgroundColor: '#000000',
logo: ''
},
banner: {
type: '1', // 0爲標籤雲,1爲輪播圖
label: [],
bgUrl: '',
bannerList: []
},
bannerSider: {
tit: '側邊欄信息',
imgUrl: '',
desc: ''
},
supportPay: {
tit: '',
imgUrl: ''
}
})
if(!Array.isArray(result)) {
console.log('配置信息初始化完成')
}else {
throw result
}
}
}
initConfig()
複製代碼
咱們在server/src/db/schema/config.js下能夠看到這段初始化config的代碼,接下來看看路由定義:
綜上咱們服務器啓動的流程以下:
因爲今天搬家,時間沒有安排出來,明天將推出服務端剩下的部分,CMS全棧的管理後臺和客戶端部分的實現。包括:
項目完整源碼地址我會在十一以前告訴你們,歡迎在公衆號《趣談前端》加入咱們一塊兒討論。