1.app.js
说明:创建服务器实例对象和开启监听端口。放置全局使用的东西。例如封装中间件res.cc()
// 中间件,封装res.cc函数
app.use((req, res, next) => {//status为1,表示失败的情况//err的值可能是一个错误对象,也可能是一个错误的字符串res.cc = function (err, status = 1) {res.send({status,message: err instanceof Error ? err.message : err,});};
//放行next();
});
2.创建router文件
说明:一般规定是放置路由请求的。
router.post("/addcates",expressJoi(add_cate_schema),addArticleCates)
3.创建schema文件夹
说明:放置验证规则模块
// 导入定义验证包
const joi = require("joi");// 定义用户名和密码的验证规则
const username = joi.string().alphanum().min(1).max(10).required();
const password = joi.string().pattern(/^[\S]{6,12}$/).required();// 定义id,nickname,email的验证规则
// integer是整数
const id=joi.number().integer().min(1).required()
const nickname=joi.string().required()
const email=joi.string().email().required()
//定义验证avatar头像的验证规则
//
/* joi.string():确保avatar是一个字符串类型的值。.dataUri():要求avatar必须是一个有效的数据URI(Data URL)。数据URI是一种特殊的URL格式,用于在纯文本中嵌入二进制数据,如图像、音频或视频文件。.required():表示avatar是必需的,不能为空或未定义。 *///定义验证注册和登录表单数据的对象
exports.reg_login_schma = {body: {username,password,},
};
4.router_hanlder文件夹
说明:放置处理函数的信息
exports.updateUserinfo = (req, res) => {// 定义执行的sql语句// 调用db.query()执行sql语句并传递参数const sql = "update ev_users set ? where id=?";//调用db.query()执行sql语句并传递参数db.query(sql, [req.body, req.body.id], (err, results) => {// 执行sql失败if (err) return res.cc(err);//执行成功,影响行数不等于1if (results.affectedRows !== 1) return res.cc("更新用户基本信息失败");res.cc("更新用户信息成功", 0);});
};
5.创建config.js
说明:放置配置文件
module.exports={//加密解密的Token秘钥jwtSecreKey:"forever",//token的有效期expiresIn:"360h"
}
6.db文件夹
说明:放置配置数据库代码。
// 导入mysql模块
const mysql=require("mysql")//创建数据库连接对象
const db=mysql.createPool({host:"127.0.0.1",user:"root",password:"123456",database:"mydb"})module.exports=db
7.创建public文件夹
说明:放置静态资源,如图片等