如何使用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

 

搞到這里,其實只要運行起來,前端就已經可以調用了

再貼一下數據庫的內容,只不過數據庫這塊我還有太多不懂,要學習的東西還太多

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM