node+pm2+express+mysql+sequelize來搭建網站和寫接口
前面的話:在這裏已經提到了安裝node的方法,node是自帶npm的。
https://www.cnblogs.com/hkly/p/10313434.html
下面會教大家怎麽去搭建一個後臺應用。
npm i //這個 i 是指install 安裝 npm -g //這個 -g是指全局安裝
Express4.16.3
Express介紹
基於 Node.js 平臺,快速、開放、極簡的 Web 開發框架
Express安裝
npm i -g express
安裝的express版本是4.0的,現在直接輸入express webtest,也會提示express不是內部命令,原因是最新express4.0版本中將命令工具分家出來了,所以我們還需要安裝一個命令工具,命令如下:
npm i -g express-generator
express中文文檔:http://www.expressjs.com.cn/4x/api.html
這裏的話用的是ejs的模板去搭建,因為前端顯示頁面是做不分離的項目,但是後臺管理的話是用vue全家桶去做,這裏的後臺搭建會在【vue三部曲】中的第二部講到。
按照這個下面的命令去做就可以了
cd webtest //進入webtest文件夾 npm install //安裝所需依賴
npm start //npm啟動
express默認的端口是3000,在瀏覽器的地址欄打開http://127.0.0.1:3000/,成功如下圖顯示
express目錄介紹
bin/www
這裏幾個執行的方法就不介紹了
// 表明是node可執行文件 #!/usr/bin/env node // 引入上面導出的app實例 var app = require(‘../app‘); // 引入debug模塊,打印調試日誌 var debug = require(‘debug‘)(‘blog:server‘); var http = require(‘http‘); // 設置端口號 var port = normalizePort(process.env.PORT || ‘3000‘); app.set(‘port‘, port); // 啟動工程 var server = http.createServer(app);// 監聽端口號 server.listen(port); server.on(‘error‘, onError); server.on(‘listening‘, onListening);
app.js
// 生成一個express實例app var express = require(‘express‘); var path = require(‘path‘); var favicon = require(‘serve-favicon‘); var logger = require(‘morgan‘); var cookieParser = require(‘cookie-parser‘); var bodyParser = require(‘body-parser‘); var index = require(‘./routes/index‘); var users = require(‘./routes/users‘); var app = express(); // 設置views文件夾為存放視圖文件的目錄,即存放模板文件的地方 // dirname為全局變量,存儲當前正在執行的腳本所在的目錄 app.set(‘views‘, path.join(__dirname, ‘views‘)); // 設置模板引擎為ejs app.set(‘view engine‘, ‘ejs‘); // 加載日誌中間件 app.use(logger(‘dev‘)); // 加載解析json的中間件 app.use(bodyParser.json()); // 加載解析urlencoded請求體的中間件 app.use(bodyParser.urlencoded({ extended: false })); // 加載解析cookie的中間件 app.use(cookieParser()); // 設置public文件夾為存放靜態文件的目錄 app.use(express.static(path.join(__dirname, ‘public‘))); // 路由控制器 app.use(‘/‘, index); app.use(‘/users‘, users); // 捕獲404錯誤,並轉發到錯誤處理器 app.use(function(req, res, next) { var err = new Error(‘Not Found‘); err.status = 404; next(err); }); // 盛傳環境下的錯誤處理器,將錯誤信息渲染error模板並顯示到瀏覽器中 app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; // 開發環境下的錯誤處理器,將錯誤信息渲染error模板並顯示到瀏覽器中 res.locals.error = req.app.get(‘env‘) === ‘development‘ ? err : {}; // render the error page res.status(err.status || 500); res.render(‘error‘); }); // 導出app實例,供其他模塊調用 module.exports = app;
rotues/index.js
// 生成一個路由實例用來捕獲訪問主頁的GET請求,導出整個路由並在app.js中通過app.use(‘/‘,routes);加載。 // 這樣,當訪問主頁時,就會調用res.render(‘index‘,{title:‘Express‘});渲染views/index.ejs模板並顯示到瀏覽器中 var express = require(‘express‘); var router = express.Router(); /* GET home page. */ router.get(‘/‘, function(req, res, next) {//首頁路由 res.render(‘index‘, { title: ‘Express‘ });//render views視圖目錄下的index.ejs模板 }); // 導出路由實例 module.exports = router;
express安裝好之後,該安裝pm2了,剛剛那個npm start肯定後面不會用的。這個命令可以在packge.json中看到是npm啟動的方式,啟動了bin/www這個文件。不用這個命令去啟動是因為,需要啟動窗口一直開著,而且沒有熱更新,寫完代碼保存之後不會實施更新。好了,現在的話安裝全局的pm2
pm2介紹
PM2是nodeJS進程管理工具,可以利用它來簡化很多node應用管理的繁瑣任務,如性能jiank監控,自動重啟,負載均衡等,而且使用是非常簡單的。當你要把你的獨立代碼利用全部的服務器上的所有 CPU,並保證進程永遠都活著,0 秒的重載, PM2 是完美的。它非常適合 IaaS 結構,但不要把它用於 PaaS 方案(隨後將開發 Paas 的解決方案)。
pm2主要特性
? 內建負載均衡(使用 Node cluster 集群模塊)
? 後臺運行 。
? 0 秒停機重載,維護升級的時候不需要停機。
? 具有 Ubuntu 和 CentOS 的啟動腳本 。
? 停止不穩定的進程(避免無限循環)
? 控制臺檢測
? 提供 HTTP API
? 遠程控制和實時的接口 API ( Nodejs 模塊,允許和 PM2 進程管理器交互 )
npm官網的pm2包:https://www.npmjs.com/package/pm2
pm2安裝npm i pm2 -g
pm2常用參數
-watch //監聽應用目錄變化,一旦發生變化,自動重啟。 -i -instances //啟動多少個實例,可用於負載均衡,如果-i 0或 -i max,則根據當前機器核數來確定實例數目。 -ignore-watch//排查監聽目錄/文件,可以是特定文件名,也可以是正則。 -n -name//應用的名字,查看應用信息。 -o -output//標準輸出日誌文件路徑 -e -error//錯誤日誌文件輸出
pm2常用命令
pm2 list //列出pm2中的所有程序 pm2 logs //列出當前所有程序的web的日誌,可以帶項目的id或者name,顯示指定程序的日誌 pm2 start bin\www //pm2啟動bin/www這個文件 pm2 stop 0//停止id為0的程序,這裏不一定要用id也可以是項目名稱name,然後可以帶一個all停止全部程序 pm2 delete 0//刪除id為0的程序,是刪除在pm2中運行的程序,同理這裏不一定要用id也可以是項目名稱name,可以帶一個all刪除全部程序 pm2 reload 0 //重啟id為0的程序,同理這裏不一定要用id也可以是項目名稱name,可以帶一個all重啟所有程序 pm2 startup //創建開機自啟動命令
在這裏說明一下,我一般喜歡使用
pm2 start bin\www --name=webtest --watch //--name是可以重命名程序顯示的名字 //--watch是實時預覽程序 //這一段代碼比較長,可以把他放在package.json中的scripts中,用npm啟動的方式去啟動pm2程序
好了基本工具已經介紹完了。現在開始啟動嗨起來,對了還有一個 sequelize,同樣的安裝方式
squelize安裝
npm i sequelize //安裝之後引入使用可能會報mysql2的錯,註意這裏有個2,所以需要安裝mysql2 npm i mysql2
squelize介紹
Sequelize是一個基於promise的關系型數據庫ORM框架,這個庫完全采用JavaScript開發並且能夠用在Node.JS環境中,易於使用,支持多SQL方言(dialect),。它當前支持MySQL,、MariaDB、SQLite、PostgreSQL、Sql Server 數據庫。
目前在Node.js中,Sequelize的關註度較高,用的也較多。
因為是基於promise規範,在調用後的處理上不再是callback方式,而是統一的鏈式調用方式,調用直觀,易讀。
開始
先把項目跑起來。
為了方便,可以建公共的頭部和底部使用include的方式把公共部分引入進來
然後效果就是這樣啦
創建其他的路由頁面
未完待續,內容有點多,也是讓大家看得舒服,碼字不易先吃個飯,回來繼續更。。。
node+pm2+express+mysql+sequelize來搭建網站和寫接口