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 binwww //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 binwww --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的方式把公共部分引入進來
然後效果就是這樣啦
創建其他的路由頁面
以下是官方的一些路由實例
以下是基於字元串的路徑路徑的一些示例。
此路由路徑將匹配對根路由的請求,/。
app.get("/", function (req, res) {
res.send("root")
})
此路徑路徑將匹配請求/about。
app.get("/about", function (req, res) {
res.send("about")
})
此路徑路徑將匹配請求/random.text。
app.get("/random.text", function (req, res) {
res.send("random.text")
})
以下是基於字元串模式的路徑路徑的一些示例。
此路徑路徑將匹配acd和abcd。
app.get("/ab?cd", function (req, res) {
res.send("ab?cd")
})
這條路線的路徑將會匹配abcd,abbcd,abbbcd,等等。
app.get("/ab+cd", function (req, res) {
res.send("ab+cd")
})
這條路線的路徑將會匹配abcd,abxcd,abRANDOMcd,ab123cd,等。
app.get("/ab*cd", function (req, res) {
res.send("ab*cd")
})
此路徑路徑將匹配/abe和/abcde。
app.get("/ab(cd)?e", function (req, res) {
res.send("ab(cd)?e")
})
基於正則表達式的路徑路徑示例:
此路徑路徑將匹配其中包含「a」的任何內容。
app.get(/a/, function (req, res) {
res.send("/a/")
})
這條路線的路徑將匹配butterfly和dragonfly,但不butterflyman,dragonflyman等。
app.get(/.*fly$/, function (req, res) {
res.send("/.*fly$/")
})
這個是express的地址:http://www.expressjs.com.cn/guide/routing.html
我們都知道所有能訪問的頁面都是get請求,所以一般用於seo前端渲染的模板上都是通過get路由去訪問的。
express寫介面
在這裡的話需要先安裝mysql資料庫了。可以去mysql官網下一個mysql環境,我的系統是win10 64的,所以的根據自己的系統和需要的mysql版本下載安裝。這裡有點尷尬,我忘了我是怎麼裝的了。。。大家可以搜一下win10安裝mysql的教程,還是挺多的。
進入地址:https://dev.mysql.com/downloads/mysql/ 下載mysql-8.0.11-winx64
安裝好後控制台輸入
mysqll -u root -p //回車然後輸入密碼就可以了,需要注意的是,每次需要執行的mysql語句是要在結尾加上分號的。
或者大家也可以使用可視化工具,這裡推薦的是Navicat for MySQL用著還是很舒服的,不過新手的話建議還是需要熟悉一下mysql語句的,比如我這種菜雞。
菜鳥教程的mysql教程:http://www.runoob.com/mysql/mysql-tutorial.html
show databases; //顯示所有資料庫
create database webtest;//創建名為webtest的資料庫
use webtest;//選中webtest的資料庫
好吧。我覺得我還是需要一個工具
新建一個表,裡面暫時是沒有數據的。可以通過後面給出的方法做一個套增刪該查
未完待續。
作者:heiyehk
原文:https://www.cnblogs.com/hkly/p/10324843.html


※10個頂級的CSS3代碼生成器
※Logback中使用TurboFilter實現日誌級別等內容的動態修改
TAG:程序員小新人學習 |