当前位置: 首页 > 后端技术 > Node.js

koa2+sequelize+mysql+pm2,支持nodewebpack打包,在线部署日志查询

时间:2023-04-03 19:06:49 Node.js

介绍koa2作为主节点服务入口webpack打包节点环境pm2服务负载均衡mysql数据库mysql强大的事务sequelizekoa-body,文件上传中间件koa-corskoa跨域中间件验证器参数验证器自动返回json消息和keylog4日志输出......项目独立提供服务接口,前后端分类可以提供很好的解决方案。依赖节点-v8.4.0npm-v5.3.0npm2-v3.5.1目录├─auto//sequelize-auto自动生成模型实体类└─src|main.js//入口文件|router.js//控制器入口|├─config//配置文件├─controller//api层├─models//实体类├─utils//工具类└─validator//参数验证器安装githttps://github.com/shanyanwt/koa_vue_blog.gitnpminstall开发环境npmrundevlocalhost:8081生产环境npmrunbuild//生成app.jsnpmrunpm2localhost:8081supervisornodejs热加载开发环境usesupervisor-wsrc,添加需要监控的文件,默认是所有但有时它不起作用,添加监控文件以创建数据库连接varsequelize=newSequelize(dbName,dbUser,dbPas,{host:dbHost,dialect:'mysql',pool:{max:5,min:0,idle:10000},define:{timestamps:false//关闭时间戳}})//测试连接sequelize.authenticate().then(()=>{//连接成功}).catch(err=>{//这里可以添加邮件通知});sequelizewiki方法名属性返回结果创建添加返回添加信息ObjectbulkCreate批量添加返回添加信息ArrayfindOne查询单个返回ObjectfindByPk基于主键查询返回ObjectfindAll查询返回ArrayfindAndCountAll分页查询返回Object->count:Number,rows:Arrayupdate更新返回1或0Numberdestroydeletereturn1or0Numbermax('age')计算最大返回Objectmin('age')计算最小返回Objectsum('age')计算和返回Objectcount查询数返回1or0Numberquery原始sql查询返回Objectsequelize属性方法wiki方法名属性remark属性:['id']包含条件查询只查询iddb.literal('star_number+1')自定义字符不会转义,可以作为sql执行db.transaction事务处理可以执行transaction对批量操作的处理,失败通过pomise或thrownewError()处理,自行回滚ps:db是从modes导出的连接库的sequelizemodels生成sequelize-auto插件模型生成可以在auto中找到在目录下执行password1.进入auto文件夹,输入$nodeauto.js2.执行auto.js后,会生成models和table实体类,导出为index.js。命令sequelize-auto-h"数据库地址"-d"数据库名"-u"用户名"-x"密码"-p"端口号"--dialectmysql-o"生成文件的路径"LinValidator参数验证器自定义检查是否传入参数正确,错误返回错误JSON信息,key1.userValidator.js引入const{XValidator,Rule}=require('../validator/validator.js');/*模拟用户注册规则*/classRegisterValidatorextendsLinValidator{constructor(){super();//链验证规则this.name=[newRule('isNotEmpty','昵称不能为空'),newRule('isLength','昵称长度必须在2~10之间',2,10)];this.email=[newRule('isOptional'),newRule('isEmail','邮箱地址不符合规范,请输入正确的邮箱地址')];this.password=[//自定义匹配方法newRule('matches','密码长度必须在6到22个字符之间,包括字符、数字和_',/^[A-Za-z0-9_*&$#@]{6,22}$/)];这个.confirm_password=newRule('isNotEmpty','确认密码不能为空');}/*自定义的calidate校验规则,必须以calidate开头,data是一个方法,传入参数,参数传递成功则返回trueConfirmPassword*/validateConfirmPassword(data){if(!data.body.password||!data.body.confirm_password){return[false,'两次输入的密码不一致,请重新输入'];}让ok=data.body.password===data.body.confirm_password;如果(好){返回好;}else{return[false,'两次输入的密码不一致,请重新输入'];}}}module.exports={RegisterValidator};user.jsconst{RegisterValidator}=require('./userValidator.js');consttestRegister=asyncctx=>{//调用RegisterValidator//如果验证成功则继续往下走是否合法,否则会抛出异常throwError()constv=awaitnewRegisterValidator().validate(ctx);/*vreturnsbody,query,params,header请求参数链值可以防止多层对象无结值错误*///post值varname=v.get('body.user.index.items.name')//获取值vargetName=v.get('query.name')/**.非法会返回{"error_code":20001,"error_message":{"name":"昵称不能为空","password":"密码长度必须在之间6和22个字符,包括字符、数字和_","confirm_password":"确认密码不能为空","ConfirmPassword":"两次输入的密码不一致,请重新输入"}}*/}生产环境部署pm2配置生产环境centos7并全局安装以上所有依赖npminstallpm2-g$pm2-v>3.5.1配置pm2.conf.json打印日志输出文件"out_file":"./out.log","error_file":"./out.log""instances":2//启用多任务作为负载均衡生产部署步骤build生成app.jswebpack打包方案npmrunbuild上传服务器文件安装依赖npminstallpm2服务部署$npmrunpm2//启动服务ps:确保已安装,上面的依赖$npminstallpm2-g$pm2list//查看正在运行的服务$pm2logs//查看服务日志$pm2stop0//进程那个停止响应ps:这个服务已经发布完成后,根据服务器ip:8081调用即可。在下次更新时,只需将app.js上传到服务器并重新启动它即可。我是一只孤独的狼...欢迎star