如何使用node做后台接口开发

趁着空闲一两天,赶紧学习一下node,不然又要忘记了。今天完成了一个接口,自己用前端请求也是成功的,记录一下。

首先看一下整体的目录,最简单的了,后面再学习到内容肯定要再优化

其中,app.js是项目的入口,connect.js是统一用来连接数据库的方法,api文件下面的index.js用来存接口地址和名字,api文件下面的文件就用来区分项目模块,获取数据库数据然后导出

 

项目开始之前要先安装nodejs+mysql,创建一个项目文件夹,在文件夹中打开命令行工具,输入npm init初始化一个项目,然后输入一些基本信息

得到的package.json文件中,需要安装一下下面这几个依赖包,后面会说到每个的用处

 

 接下来就是直接贴代码了。

首先从app.js文件入手,这是一个入口文件,里面可以做全局拦截,接口的处理,监听端口,

app.js

const { app, pool, Result } = require('./connect')
const api = require('./api/index')

app.all('*', (req, res, next) => {
  //处理全局拦截
  next()
})

app.all('/', (req, res) => {
  pool.getConnection((err, conn) => {
      console.log(11)
    res.json({ a: 'b' })
    conn.release() //释放连接池,等待别的链接使用
  })
})
//遍历添加接口
api.map(item=>{
    app.use(item.title,item.url)
})
app.listen(82, () => {
  console.log('服务启动')
})

然后说一下connect.js文件,上面有提到这个是用来连接数据库的,那肯定就少不了一些数据库的配置信息,其中用了node的express框架,里面的mysql并不是我们的数据库,只是用来连接数据库的一个包,然后cors包食用来解决跨域问题的,其他就不细说了。直接上代码

 connect.js

const express = require('express')
const mysql = require('mysql')
const cors = require('cors')
const bodyParser = require('body-parser') //解析参数
const app = express()
const router = express.Router()
//数据库基本配置信息
const option = {
  host: 'localhost',
  user: 'root',
  password: 'root',
  port: '3306',
  database: 'test',
  connectTimeout: 5000, //连接超时
  multipleStatements: false, //是否允许一个query中包含多条sql语句
}

app.use(cors()) //解决跨域
app.use(bodyParser.json()) //json请求
app.use(bodyParser.urlencoded({ extended: false })) //表单请求
app.listen(81, () => console.log('服务启动'))
let pool
//建立重连机制
repool()

function Result({ code = 1, msg = '', data = {} }) {
  this.code = code
  this.msg = msg
  this.data = data
}
function repool() {
  pool = mysql.createPool({
      ...option,
      waitForConnections:true,//当唔连接池可用时,等待(true)还是报错(false)
      connectionLimit: 100,//连接数限制
      queueLimit:0//最大连接等待数(0为不限制)
  })
  //监听error事件,如果err.code返回了以下字符串,那么我们就重新发起连接
  pool.on(
    'error',
    (err) => err.code === 'PROTOCOL_CONNECTION_LOST' && setTimeout(reconn, 2000)
  )
}
module.exports={pool,Result,router,app}

然后说到api文件,api文件下的index.js文件,上面说到是用来存放接口地址和名字的,现在只写了一个,后面肯定还有很多,很多的时候,这个就会很大,这里肯定还是需要优化的,可是目前没有想到比较好的方法,所以就先这样做。这里到处了一个api数组,在app.js文件中进行导入添加

api---index.js

const api = [
    {
        url:require('./apiModule/login/index'),
        title:'/login'
    }
]

module.exports=api;

然后就看一下api文件下的apiModule文件,想法是要把整个项目按照模块区分,然后一些查询语句及信息就写在里面,这里就写了一个login文件下的index.js文件,

api---apiModule---login---index.js

const { pool, router, Result } = require('../../../connect')
router.all('/', (req, res) => {
  pool.getConnection((err, conn) => {
    //从连接池中哪一个连接
    conn.query('SELECT * FROM students', (e, r) => {
      let arr = r;
      let obj = { name: '小刘', sex: '男', age: 24, address: '北京', id: 7 }
      arr.push(obj)
      res.json(new Result({ data: arr }))
    })
    conn.release() //释放连接池
  })
})
module.exports = router

可以看到上面写的是一个查询语句,至于中间部分问什么要插入一条数据,其实只是我自己为了测试一下更改数据库返回的信息。可以直接去掉的。

然后上面安装的依赖包基本有用到了,还有一点差点被我忽略了,就是我们更改东西之后,如果每次都运行一下,那就很麻烦了,所以package.json中有一个依赖包就是用来解决这个问题的----hotnode,在package.json文件中添加一个自定义命令npm start

 

搞到这里,其实只要运行起来,前端就已经可以调用了

再贴一下数据库的内容,只不过数据库这块我还有太多不懂,要学习的东西还太多

 

posted @ 2020-11-03 10:55  超哥20  阅读(1099)  评论(0编辑  收藏  举报