zoukankan      html  css  js  c++  java
  • 如何使用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

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

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

  • 相关阅读:
    bzoj2815: [ZJOI2012]灾难
    bzoj1188: [HNOI2007]分裂游戏
    bzoj4538: [Hnoi2016]网络
    bzoj3594: [Scoi2014]方伯伯的玉米田
    bzoj2595: [Wc2008]游览计划
    bzoj3277: 串
    Django开发:(3.2)ORM:多表操作
    Django开发:(3.1)ORM:单表操作
    Django:(2)视图层&模板层
    Django开发:(1)django基础 & url控制器
  • 原文地址:https://www.cnblogs.com/chao202426/p/13918237.html
Copyright © 2011-2022 走看看