一个项目初试化,首先要创立一个单独的项目文件夹,然后终端npm init直接安装package.json,api.js接口文件,路由模块创立一个文件夹夹,路由函数又要分为一个模块,再把数据库创立好,基本就可以开始完成功能需求了,用后端node完成增删改查
项目文件分类:
1.接口文件
Go
// 1.初始化
// 1.1创建项目
const express = require('express')
const app = express()
// 1.2配置跨域
const cors = require('cors')
app.use(cors())
// 1.3配置解析表单中间件
// 错误点:记住要有参数
app.use(express.urlencoded({extended : false}))
// 2.3因为后面处理函数用到了很多res.send所以封装为一个全局中间件,给res绑定一个函数,那后面的中间件路由都可以用到这个函数了
app.use((req, res, next) => {
res.cc = function(err, status = 1) {
res.send({
status,
msg : err instanceof Error ? err.message : err
})
}
next()
})
// 2.4.6配置解析token的中间件
const expressJWT = require('express-jwt')
const secretKey = require('./secretKey')
app.use(expressJWT({secret : secretKey.secretKey, algorithms : ['HS256']}).unless({path : [/^\/api\//]}))
// 1.4.4导入路由模块
const routerUser = require('./router/user')
const Joi = require('joi')
const { expressjwt } = require('express-jwt')
const { path } = require('express/lib/application')
app.use('/api', routerUser)
// 3.1.1个人中心路由导入
const infoRouter = require('./router/userinfo')
app.use('/my', infoRouter)
// 4.1.2文章管理导入
const article = require('./router/acticle')
app.use('/my/article', article)
// 5.1.2发布文章路由导入
const cates = require('./router/cate')
app.use('/my/article', cates)
// 2.2.3定义规则joi的错误级别中间件
app.use((err, req, res, next) => {
if (err instanceof Joi.ValidationError) return res.send(err.message)
// 2.4.7增加jwt错误中间件
if (err.name == 'UnauthorizedError') return res.cc('身份认证失败')
return res.send('其他错误')
})
app.listen(80, () => {
console.log('http://127.0.0.1');
})
2.写好接口文件该去给路由创建模块
写好接口文件该去给路由创建模块
Go
// 1.4初始化路由相关文件夹 不光要给路由分装一个模块 里面的处理函数也要有一个模块
const express = require('express')
const { append } = require('express/lib/response')
const router = express.Router()
// 1.4.2导入路由处理函数
const routerHandler = require('../router_handler/user')
// 注册
// 2.2.2导入joi验证输入进来的是否合法
const expressJOI = require('@escook/express-joi')
const {schema_user_info} = require('../schema/user')
router.post('/reguser',expressJOI(schema_user_info), routerHandler.getReguser)
// 2.4登录
// 2.4.1添加语法规则,可以直接用注册的
router.post('/login',expressJOI(schema_user_info), routerHandler.getLogin)
module.exports = router
3.处理函数模块
处理函数模块
Go
// 1.4.1初始化路由处理函数模块
//注册
const db = require('../mysql')
//导入密码加密解密包
const bcrypt = require('bcryptjs')
function getReguser(req, res) {
// res.send('这里是注册模块')
// 2.2.4检测用户名是否被占用 导入mysql
let selectUser = 'select * from users where username = ?'
db.query(selectUser, req.body.username, (err, results) => {