express簡單搭建服務,mysql數據庫查詢
- 項目目錄搭建:
- public存放公共資源;package.json通過npm init生成;src下:app.js是入口文件,搭建服務;config是路由配置文件,router是每一個路由文件,modules是查詢數據庫的操作;
- public存放公共資源;package.json通過npm init生成;src下:app.js是入口文件,搭建服務;config是路由配置文件,router是每一個路由文件,modules是查詢數據庫的操作;
- 貼上package.json文件
{ "name": "myserver", "version": "1.0.0", "description": "my server with project", "main": "./src/app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "babel -w src/ -d build/ --source-maps", "dev": "nodemon node build/app.js" }, // 做語法轉換 "babel": { "presets": [ "es2015", "stage-0" ] }, "author": "", "license": "ISC", "devDependencies": { "babel-preset-es2015": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "body-parser": "^1.18.3", "express": "^4.16.4", "mysql": "^2.16.0", "nodemon": "^1.18.6" } }
需要注意的是:如果用了babel,一定要去全局安裝babel, babel-cli, babel-core三個包纔可以
nodemon來持續重啓項目工程
運行的時候需要先npm run build 來打包出來build文件夾,然後再npm run dev啓動服務 - express搭建服務
// src/app.js import express from 'express' import path from 'path' import bodyParser from 'body-parser' import router from './config' const app = express() const staticPath = path.join(process.cwd(), 'public') app.use(express.static(staticPath)) app.use(bodyParser.urlencoded({extended: false})) app.use(bodyParser.json()) app.use('*', function (req, res, next) { res.header("Access-Control-Allow-Origin", "*") res.header("Access-Control-Allow-Headers", "*") next() }) router(app) app.listen(3002, function () { console.log(`http://localhost:3002`) })
引入express包listen監聽端口,引入body-parser包解析post方式傳遞的參數,設置靜態資源訪問路徑,設置允許訪問的地址,引入路由
- config文件夾下新建index.js開放接口
// config/index.js import GetData from '../router/getData' export default function (app) { app.get('/api/getArticleList', GetData) }
- modules文件夾下新建index.js連接數據庫
// modules/index.js import mysql from 'mysql' let connect = mysql.createConnection({ host: 'localhost', user: 'root', password: '123456', port: '3306', database: 'user' }) connect.connect() export default connect
創建數據庫連接
- modules文件夾下新建router對應的文件來配置數據庫查詢
// modules/getData.js import connect from './index.js' const GetData = function (callback) { connect.query('select * from article_list', function(err, data) { if (err) { console.error(err) } callback(data) }) } export default GetData
- router文件夾下新建對應文件處理響應
// router/getData.js import express from 'express' import GetData from '../modules/getData.js' const router = express() router.get('/api/getArticleList', function(req, res) { GetData(function (data) { res.end(JSON.stringify(data)) }) }) export default router
部署到線上,並pm2守護
- window10本地部署到阿里雲ECS服務CentOS7系統上。
- 本地scp命令上傳到雲服務,scp -r projectName/ root@URL :fileName
- 遠端文件下載到本地的命令是:scp -r root@url:/root/projectName 本地路徑
- fileName是雲服務的路徑。ls命令查看雲服務的所有文件
- 上傳成功之後,雲服務全局下載babel所需的包和pm2。因爲項目需要npm run build 和npm run dev同時執行,但是pm2做不到這一點,所以,我們用以下方式來實現:
- 在項目根目錄新建build.json文件,內容如下:
- 然後pm2 start build.json 命令啓動npm run build
- 接下來需要pm2 start build/app.js --watch 或者 直接 npm run dev 啓動服務
- 最後,就可以嘗試訪問了
可能的問題
-
因爲我的CentOS還是firewalld防火牆開啓狀態,並且正好3002端口我沒有允許通過,所以剛開始是訪問不到接口的
-
所以,先查看防火牆狀態: systemctl status firewalld,如果是active,證明是啓動狀態
-
如果防火牆沒啓動,就啓動防火牆:systemctl start firewalld
-
接着,查看所有已經啓動的服務:systemctl list-unit-files|grep enabled
-
查看firewalld允許通過的端口列表:firewall-cmd --zone=public --list-ports
-
查看當前開了哪些端口,其實一個服務對應一個端口 firewall-cmd --list-services
-
發現我只開放了3306端口,接着我開放了3002端口 :firewall-cmd --zone=public --add-port=3002/tcp --permanent
-
之後需要重啓防火牆:systemctl restart firewalld.service
-