1、安装node
node -v
2、express和koa2生成器创建项目
npm install express-generator -g
express project
npm install koa-generator -g
koa2 project
两个项目分别是jade和pug的模板引擎,懒得学习其语法,换成ejs的模板引擎:
npm install ejs
app.set('view engine', 'ejs'); // express
或者
app.use(views(__dirname + '/views', { extension: 'ejs' })) // koa2
3、连接数据库
docker pull mysql
docker run --name mysql-docker -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker exec -it mysql-docker mysql -uroot -p
或者
docker exec -it mysql-docker bash
mysql -uroot -p
由于mysql8.0和mysql5.0版本加密方式不一样:(mysql8.0:caching_sha_password,mysql5.0:mysql_native_password)。本地Workbench可以连接,但Navicat连接失败。
show databases;
use mysql;
select host,user,plugin from user;
alter user 'root'@'%' identified with mysql_native_password by '123456';
flush privileges;
select host,user,plugin from user;
exit;
// routes/database.js
// 连接Mysql
var mysql = require('mysql');
// 数据库连接配置
var pool = mysql.createPool({
host: '119.45.12.238', // 数据库的地址
port: '3307',
user: 'root', // 数据库用户名
password: '84529563f', // 数据库密码
database: 'wenlx' // 数据库名称
})
console.log(pool._allConnections.length) //0
// 对数据库进行增删改查操作的基础
function query(sql, callback) {
pool.getConnection((err, connection) => {
console.log(pool._allConnections.length) //1
connection.query(sql, (err, rows) => {
callback(err, rows)
connection.release()
})
})
console.log(pool._allConnections.length) //1
}
exports.query = query
// routes/user.js
var express = require('express');
var router = express.Router();
// 引入数据库配置文件
const db = require('./database')
// 获取数据库中的user表数据
router.get('/', (err, res) => {
const sql = 'SELECT * FROM user';
db.query(sql, (err, result) => {
if(err){
return;
}
// res:API传数据
// result:返回的数据,需要转成JSON格式
res.json({
data: result,
total: 4
});
});
})
module.exports = router;
本地测试成功:
部署线上:
// Dockerfile
FROM node:lts-alpine3.12 as build
RUN npm config set registry https://registry.npm.taobao.org
ADD ./express /home/wenlx/dist
WORKDIR /home/wenlx/dist
RUN npm install
EXPOSE 3000
CMD ["node","./bin/www"]
# docker build -t expresstest .
# docker run -d -p 8888:3000 expresstest
// docker-compose.yml
version: "3.7"
services:
html:
container_name: mysql_docker
image: express:test
build:
dockerfile: Dockerfile
context: .
ports:
- 8808:3000
# docker-compose build --no-cache && docker-compose up -d
4、本地postman测试
5、解决跨域问题
新建web项目,用axios请求:
方案一:web端代理
方案二:服务端允许跨域访问
npm install cors -S 或者 npm install koa2-cors -S
const cors = require('cors')
app.use(cors())