写接口到调接口

333 阅读2分钟

1、安装node

node -v

2、express和koa2生成器创建项目

npm install express-generator -g

express project

npm install koa-generator -g

koa2 project

1617936291(1).png 1617936348(1).png

两个项目分别是jade和pug的模板引擎,懒得学习其语法,换成ejs的模板引擎:

npm install ejs

app.set('view engine', 'ejs'); // express

或者

app.use(views(__dirname + '/views', { extension: 'ejs' })) // koa2

1617936425(1).png

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;

1617935173(1).png

// 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;

本地测试成功:

1617935635(1).png

1617935528(1).png

部署线上:

// 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测试

1617681370(1).png

5、解决跨域问题

1617936714(1).png

新建web项目,用axios请求:

1617936937(1).png

方案一:web端代理

462462335b2c751e7b725b8a73f3831.png

1617937841(1).png

1617937208(1).png

方案二:服务端允许跨域访问

npm install cors -S 或者 npm install koa2-cors -S

const cors = require('cors')

app.use(cors())

1617938011(1).png

1617937208(1).png