安装express
已搭建好node环境,安装好mongodb数据库的情况下,安装express以及必要插件
npm i express -S
npm i body-parser -S
npm i cors -S
使用express
- 新建一个项目文件夹nodeServer,在文件夹中新建一个server.js,内容如下
const express = require('express')
const bodyparser = require('body-parser')
const app = express()
// 解析表单数据 x-www-form-urlencode
app.use(bodyparser.urlencoded({ extended: false }))
// 解决跨域
app.use(cors())
// 解析json数据
app.use(bodyparser.json())
app.get('/user/login',(req, res) => {
let {user,psw} = req.query
if(user == 'admin' && psw == '123456'){
res.send({err: 0, msg: 'login OK'})
}else{
res.send({err: -1, msg: 'login error'})
}
})
// post消息体需要第三方插件解析,body-parser
app.post('/user/register',(req, res) => {
let {user,psw} = req.body
if(user == 'admin' && psw == '123456'){
res.send({err: 0, msg: 'register OK'})
}else{
res.send({err: -1, msg: 'register error'})
}
})
app.listen(3000, () => {
console.log('server start')
})
在当前目录的终端中输入node server.js启动服务,简单的get、post服务器接口就完成了。
设置静态目录
// 将当前目录的static文件夹设置问静态目录public
app.use('/public', express.static(path.join(__dirname, './static')))
api文档
- 使用apidoc,自动生成api文档
- 官方文档
// 安装
npm i apidoc -g
- 在你的项目根目录下新建apidoc.json文件,该文件描述了项目对外提供接口的概要信息如名称、版本、描述、文档打开时浏览器显示标题和接口缺省访问地址。
{
"name": "ServiceAPI",
"version": "1.0.0",
"description": "XXX接口文档",
"title": "ServiceAPI",
"url" : "http://xxx"
}
- 使用样例
/**
* @api {post} /user/reg 用户注册
* @apiName reg
* @apiGroup user
*
* @apiParam {String} us 用户名
* @apiParam {String} ps 密码
* @apiParam {String} code 验证码
*
* @apiSuccess {String} err: 0 注册成功
*
*/
router.post('/reg', (req, res) => {
// 获取数据
let { us, ps, code } = req.body
if (us && ps && code) {
// 判断验证码是否正确
if(codes[us] != code){
return res.send({ err: -2, message: '验证码错误' })
}
User.find({ us })
.then(data => {
if (data.length === 0) {
return User.insertMany({ us, ps })
} else {
res.send({ err: -2, message: '用户名已存在' })
}
})
.then(data => {
res.send({ err: 0, message: '注册ok' })
})
.catch((err) => {
res.send({ err: -1, message: '注册失败' })
})
} else {
return res.send({ err: -1, message: '参数错误' })
}
})
- 生成文档
cd到apidoc.json所在路径(即项目根目录)执行如下命令即可
apidoc -i src/ -o apidoc/
执行成功后会生成apidoc文件夹,点开apidoc文件夹中index.html会发现已经生成api文档
mongoose
- 安装mongoose
npm i mongoose -S
- 在根目录新建db文件夹,然后db文件夹中新建model目录以及connect.js文件,内容如下
const mongoose = require('mongoose')
const db = 'mongodb://localhost/testdb'
exports.connect = () => {
// 连接数据库
mongoose.connect(db, { useNewUrlParser: true, useUnifiedTopology: true })
let maxConnectTimes = 0
return new Promise((resolve, reject) => {
// 数据库监听事件
mongoose.connection.on('disconnected', () => {
console.log('数据库断开重连')
if(maxConnectTimes <= 3){
maxConnectTimes++
mongoose.connect(db)
}else{
reject()
throw new Error('数据库出现问题,请人为处理')
}
})
mongoose.connection.on('error', (err) => {
console.log('数据库断开重连')
if(maxConnectTimes <= 3){
maxConnectTimes++
mongoose.connect(db)
}else{
reject(err)
throw new Error('数据库出现问题,请人为处理')
}
})
mongoose.connection.once('open', () => {
console.log('数据库连接成功')
resolve()
})
})
}
- 在model目录下新建userModel.js内容如下
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const userSchema = new mongoose.Schema({
userID: Schema.Types.ObjectID,
account: {type: String, required: true},
password: {type: String, required: true},
name: {type: String, required: true},
sex: {type: Number, default: 0},
createAt: {type: Date, default: Date.now()}
}, { collection: 'user' })
// collection将mongodb默认取名方式改为指定名
// 改数据对象和集合关联('集合名', schema对象)
module.exports = mongoose.model('user', userSchema)
Router
- 在根目录新建一个router目录,在router中新建userRouter.js内容如下
const express = require('express')
const router = express.Router()
const User = require('../db/model/userModel')
router.post('/login', (req, res) => {
let { us, ps } = req.body
if (!us && !ps) { return res.send({ err: -1, message: '参数错误' }) }
User.find({ us, ps })
.then(data => {
if (data.length > 0) {
res.send({ err: 0, message: '登录成功' })
} else {
res.send({ err: -2, message: '用户名或密码不正确' })
}
})
.catch(err => {
return res.send({ err: -1, message: '内部错误' })
})
})
module.exports = router
server
- server.js内容如下
const express = require('express')
const {connect} = require('./db/connect')
const path = require('path')
const app = express()
const cors = require('cors')
const bodyparser = require('body-parser')
// 解析表单数据 x-www-form-urlencode
app.use(bodyparser.urlencoded({ extended: false }))
// 解析json数据
app.use(bodyparser.json())
// 解决跨域
app.use(cors())
// 设置静态目录
app.use('/public', express.static(path.join(__dirname, './static')))
const userRouter = require('./router/userRouter')
app.use('/user', userRouter)
// 立即执行函数,连接数据库
;(async () => {
await connect()
})()
app.listen(3000, () => {
console.log('server start, port: 3000')
})