1. 程式人生 > >node+pm2+express+mysql+sequelize來搭建網站和寫接口

node+pm2+express+mysql+sequelize來搭建網站和寫接口

test 怎麽 開始 RoCE tle parse mage found esql

前面的話:在這裏已經提到了安裝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來搭建網站和寫接口