express服务端基本开发环境
...
express服务端基本开发环境
1、安装必要软件和包
XAMPP
XAMPP是一个集成常用服务的软件,可以快速在本地搭建Apache和MySQL等而不必单独安装。它的后台是php写的,不过这与我们无关。
js包
基本开发环境需要三个包:
npm install express --save
npm install nodemon --save
npm install mysql --save
2、文件编写
简单的demo目录如下:
├─ 📁backend
│ ├─ 📁routes
│ │ └─ 📄test.js
│ ├─ 📄index.js
│ ├─ 📄mysql.js
│ ├─ 📄package-lock.json
│ └─ 📄package.json
└─ 📁frontend
mysql.js
首先写和数据库交互的逻辑。
// 创建MySQL对象
const mysql = require('mysql')
// 初始化对象
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'newdatabase'
})
// 封装交互
const sqlFn = (sql, arr, callback) => {
connection.query(sql, arr, callback)
}
module.exports = sqlFn
其中直接和sql交互的函数是connection.query
,它接收三个参数:第一个是字符串格式的sql查询语句;第二个是参数数组(用于查询语句中的占位符,没有就写空表);第三个是回调函数。回调函数也有规定的格式,这部分在test中调用时再说。
index.js
这是服务端的主入口文件:
const express = require('express')
const app = express()
const test = require('./routes/test')
// 路由绑定
app.use('/', test)
// 开启端口并监听
app.listen('3000', () => {
console.log('start listening...')
})
这样打开根目录后就可以看见test中返回的东西。
test.js
const express = require('express')
const router = express.Router()
// 导入封装后的函数
const sqlFn = require('../mysql')
router.get('', function(req, res, next) {
// 打印整张表
const sql = 'SELECT * FROM test'
sqlFn(sql, [], function(err, data) {
if(err) {
throw err
}
// 返回data给客户端
res.send({
code: '200',
records: data
})
})
})
// 导出该条路由供index使用
module.exports = router
这里可以看到回调的格式是错误优先、后面是返回数据。在函数体内也要先处理错误(这里直接抛出),后面再对数据做处理。
运行项目
在package.json中确认两条:
"main": "index.js",
"scripts": {
"start": "nodemon index.js"
},
把入口文件定好后,如果加入了上面的脚本,则可以直接通过
npm start
运行整个后台项目。之后访问3000端口根目录就可以看到数据库中的test表数据。
添加全局异常处理
把遇到报错时的处理逻辑改为如下写法:
if(err) {
next(err)
return
}
即把错误交给下一个中间件,然后直接中止这次查询。对于next,需要定义在index.js中:
app.use((err, req, res, next) => {
console.log(err.stack)
res.status('500').send('INTERNAL SERVER ERROR')
})
一般的中间件函数只需要三个参数:req, res, next,但是错误处理中间件需要一个额外的err,表示从上一个部分传过来的错误。