# 互联网医院后台接口 **Repository Path**: greenphp/admin-api ## Basic Information - **Project Name**: 互联网医院后台接口 - **Description**: 互联网医院后端接口. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-03 - **Last Updated**: 2023-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 医院后台接口 ## 使用express脚手架搭建项目 1.运行脚手架包 ```bash npx express-generator ``` 2.安装所依赖的包 ```bash npm install ``` 3.启动项目 ```bash SET DEBUG=hospital-api:* & npm start # 开启调试运行 npm start # 直接运行 ``` 4.修改端口 在app.js下载通过设置全局对象process的属性 ```js process.env.PORT = 3001 ``` ## 项目结构 bin/www 项目启动文件 public 静态资源目录 routes 路由器目录 views 模板引擎 app.js 服务器文件 package.json 项目描述文件 ## 精简结构 ```js var express = require('express'); // 引入路径模块 var path = require('path'); // 打印日志 var logger = require('morgan'); // 引入路由器 var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); // 设置端口 process.env.PORT = 3001 // 创建WEB服务器 var app = express(); // 使用打印日志中间件 app.use(logger('dev')); // 将post请求过程中格式为json的参数解析为对象 // {"a":"1", "b":"2"} -> {a: '1', 'b': 2} app.use(express.json()); // 将post请求过程中格式为a=1&b=2的参数解析为对象 {a:'1',b:'2'} app.use(express.urlencoded({ extended: false })); // path.join() 将路径拼接为绝对路径 // 托管静态资源 app.use(express.static(path.join(__dirname, 'public'))); // 挂载路由器 app.use('/', indexRouter); app.use('/users', usersRouter); // 错误处理中间件 app.use(function(err, req, res, next) { res.send({ code: 500, msg: '服务器端错误' }) }); // 将创建的WEB服务器暴露出来,作为一个模块被其它的模块使用 module.exports = app; ``` ## 测试接口 使用ApiPost测试,最后还需生成接口使用文档 1.设置全局变量,保存服务器信息 ```js apt.globals.set("baseURL", "http://127.0.0.1:3001"); ``` ## 将pool.query使用promise进行封装 ``` const query = (sql,val=[]) => { return new Promise((resolve,reject) => { // 从连接池中获取一个连接 pool.getConnection((err, connection) => { // 如果获取失败 if(err) { return reject(err) } // 可以使用获取到的连接执行SQL命令 connection.query(sql,val,(err,result) => { if(err) { return reject(err) } resolve(result) // 释放这个连接 connection.release() }) }) }) } ``` ## token使用 token -> 令牌,作用用于验证用户身份 1.生成token ```js // 引入用于生成token的包 const jwt = require('jsonwebtoken') // 需要提前准备好秘钥 const secret_key = 'tedu' // 生成token // obj 用于生成token的对象 // time token有效时间 const setToken = (obj,time='300s') => { return jwt.sign(obj,secret_key,{expiresIn: time}) } ``` 2.解析token,用于验证 ```js const verify = () => { // 解析token // 使用提前准备好的秘钥,是一个公钥 // 使用了同一组公钥 // 排除某些页面不要进行解析token return expressJWT({secret: secret_key, algorithms: ['HS256']}).unless({ path: ['/user/login',/^\/upload/] }) } ``` 3.发送请求的过程中需要携带token 在header头信息中心 ## 分页查询 语法 ``` select * from 数据表名称 limit 开始查询的值, 每页的数据量; ``` 开始查询的值 = (当前页码 - 1) * 每页的数据量 select * from hs_medicine where title like '%板蓝根%' limit 0,10; select * from hs_medicine limit 0,10; ## 上传文件 ```bash npm install mkdirp # 创建目录 npm install moment # 获取日期 ``` 1.jpg 上传到 以日期作为目录 文件还需要进行重命名,以时间戳进行重命名 1.jpg -> 1582832492832.jpg path.extname() mkdirp 如果目录不存在,会创建目录,会层层创建目录 ```js path.extname(文件路径) // 获取一个文件的后缀名 .jpg Date.now() //获取当前时间的时间戳 mkdirp('目录路径').then(() =>{}) //创建目录,返回一个promise对象 ``` ### multer模块 ```bash npm install multer ``` 专门用于文件上传的 https://www.npmjs.com/package/multer 具体使用 配置文件上传 ```js // 引入multer模块 const multer = require('multer') const path = require('path') const moment = require('moment') const { mkdirp } = require('mkdirp') const upload = () => { // 获取当前日期 const nowDate = moment().format('YY-MM-DD') // 配置文件上传 const storage = multer.diskStorage({ // 配置目录:指定上传到哪一个目录 destination: async (req,file,cb) => { // 根据日期创建目录 const dir = `public/upload/${nowDate}` await mkdirp(dir) // 创建好以后,设置为上传的目录 // cb回调函数,自动调用,通过这个来设置上传目录 cb(null, dir) }, // 配置文件 filename: (req,file,cb) => { // 获取到原始文件的后缀名 const extname = path.extname(file.originalname) // 使用时间戳作为新的文件名称 const filename = Date.now() + extname // 设置上传后的文件名称 cb(null,filename) } }) // 文件上传 return multer({ storage }) } // 暴露文件上传 module.exports = { upload } ``` 路由中调用配置 ```js // single() 单文件上传,设置参数名称 router.post('/upload', upload().single('pic'), (req, res, next) => { res.send({ code: 200, msg: '文件上传成功', // 将目录和文件拼接成一个路径 path: `${req.file.destination}/${req.file.filename}` }) }) ``` 接口文档:https://console-docs.apipost.cn/preview/0e389f2272806d4f/6bae1f078a428b6d