NodeJs 使用Express框架整合MySQL搭建后端服务

Express整合MySQL搭建后端服务

之前写过springboot整合mysql,但自己是搞前端的,所以还是想着用Js去写后端,于是就有了Express与Mysql整合的想法。做的时候没用express生成器,一点一点写的,毕竟只是学习嘛,没那么讲究。废话不多说,下面进入正题。

以下都是基于 node 10.15.0版本所做的

创建一个空文件夹并进入,执行 npm init -y 创建一个node项目。

npm init -y

此时文件夹下会生成一个package.json文件。
里面有个main属性,对应的值就是你要运行的js文件,默认叫index,我的给它改成了app,如下:

"main": "app.js"

安装依赖 express、 mysql

npm i express
npm i mysql

在根目录下,创建一个app.js文件,一个controller目录,一个service目录,一个static目录。

在app.js里引入express,使用express里的json等中间件来处理json数据等等,最后监听指定的端口号,如下:

const express = require('express')
const app = express()
const userController = require('./controller/user-controller/index')

app.use(express.json())
app.use(express.urlencoded())

app.use('/user', userController)

app.listen('9090', () => {
	console.log('NodeJs后端服务器启动成功')
})

app.use(‘/user’, userController),这个用来处理对应的路由。接下来咋弄,直接放代码了。

控制层:

const express = require('express')
const router = express.Router()
const userService = require('../../service/user-service/index')

router.get('/listUser', (req, res) => {
	userService.listUser(req, res)
})

module.exports = router

它调用了service层,service层如下:

const mysql = require('../../static/js/mysql/index')

module.exports.listUser = (req, res) => {
	let sql = 'select * from user'
	let value = []
	mysql.query(sql, value, (row) => {
		res.json(row)
	})
}

它调用了mysql,mysql代码如下:

const mysql = require('mysql')
const util = require('../util/inex')

const pool = mysql.createPool({
	host: '127.0.0.1',
	port: '3306',
	user: 'root',
	password: 'password',
	database: '你要连接的数据名字',
	connectionLimit: 50, //用于指定连接池中最大的链接数,默认属性值为10.
	queueLimit: 3 //用于指定允许挂起的最大连接数,如果挂起的连接数超过该数值,就会立即抛出一个错误,默认属性值为0.代表不允许被挂起的最大连接数。
})

module.exports.query = (sql, value, callback) => {
	pool.getConnection((err, connection) => {
		if (err) {
			console.log('数据库连接失败')
			pool.releaseConnection() //释放链接
			let error = {
				code: '500',
				message: '数据库连接失败'
			}
			callback(error)
		} else {
			connection.query(sql, value, (err, row) => {
				if (err) {
					console.log('sql语句执行失败,没有找到指定的结果')
					connection.release() //释放链接
					let error = {
						code: '500',
						message: 'Sql语句执行失败,没有找到指定的结果'
					}
					callback(error)
				} else {
					connection.release()
					if (row instanceof Array) {
						let response = {
							code: '200',
							date: util.toHump(row)
						}
						callback(response)
					} else {
						let response = {
							code: '200',
							data: []
						}
						callback(response)
					}
				}
			})
		}
	})
}

里面有个toHump方法,我表里的字段使用小写接下划线的,但是返回给前台的时候想转换成驼峰的,所以写了个工具方法,如下:

// 下划线转驼峰
module.exports.toHump = (array) => {
	let toHump = (key) => {
		return key.replace(/\_(\w)/g, function (all, letter) {
			return letter.toUpperCase();
		})
	}
	let tempArray = []
	for (let i of array) {
		let obj = {}
		for (let j of Object.keys(i)) {
			obj[toHump(j)] = i[j]
		}
		tempArray.push(obj)
	}
	return tempArray
}

最后的最后,运行app.js文件,直接 node app.js (后缀可以省略)。运行完毕,去浏览器访问接口,就能看到相应的数据了。

顺带提一下,这有个缺点。就是每改一次代码就要重启一次,所以我用nodemon启动。首先全局安装nodemon,我装的2.0.0版本,最新版本在用的时候好像会报错,不知道啥原因所致(难道node版本低了?我之前用16.16.0的版本貌似也出错,郁闷啊。。。)。安装好之后,直接 nodemon app.js就可以了。

全局安装 nodemon,如下:

npm i nodemon@2.0.0 -g

特此记录!

你可能感兴趣的:(express,mysql,数据库)