当前位置: 首页 > news >正文

河北省建设工程招标投标协会网站网页设计与制作教程第三版答案

河北省建设工程招标投标协会网站,网页设计与制作教程第三版答案,提高百度搜索排名,深圳市建筑工程交易服务模型 在src目录下创建model目录#xff0c;用来存放模型 创建用户模型 user.model.js 注意#xff1a; UUID类型是无法自增的#xff0c;将id设置为UUID类型时只需要为其指定默认值即可 // 数据类型 const { DataTypes } require(sequelize); // 导入已经连接了数据库…模型 在src目录下创建model目录用来存放模型 创建用户模型 user.model.js 注意 UUID类型是无法自增的将id设置为UUID类型时只需要为其指定默认值即可 // 数据类型 const { DataTypes } require(sequelize); // 导入已经连接了数据库的Sequlize对象 const sequelize require(../db/seq);// 创建模型 const User sequelize.define(zd_user, // 对应数据库里的表默认会变成复数形式也就是 zd_users// 定义模型的属性表的字段{// id会被自动创建也可以不定义id: {type: DataTypes.UUID, // UUID 类型unique: true, // 是否唯一primaryKey: true, // 是否是主键comment: 主键, // 注释defaultValue:DataTypes.UUIDV4 // 设置uuid的生成规则},// 用户名user_name: {type: DataTypes.STRING, // 对应VARCHAR(255)unique: true,allowNull: false,comment: 用户名,// 验证器用于校验格式具体见官方文档validate: {isAlphanumeric: true, // 仅允许字符和数字len: [6, 10], //长度},},// 密码password: {type: DataTypes.CHAR(64),allowNull: false,comment: 密码,validate: {isAlphanumeric: true, // 仅允许字符和数字len: [6, 10], //长度},},// 是否是vipis_vip: {type: DataTypes.BOOLEAN,allowNull: false,defaultValue: 0, // 默认值BOOLEAN类型的值只有0和1填写true和false也会被自动转换comment: 是否是vip,},} );// 模型同步将创建表,如果表已经存在,则将其首先删除 // User.sync({ force: true });module.exports User;在项目根目录下运行该js文件创建表要在项目根目录下不然无法读取到.env中的变量 默认情况下,Sequelize 使用数据类型 DataTypes.DATE 自动向每个模型添加 createdAt 和 updatedAt 字段. 这些字段会自动进行管理 - 每当你使用Sequelize 创建或更新内容时,这些字段都会被自动设置. createdAt 字段将包含代表创建时刻的时间戳,而 updatedAt 字段将包含最新更新的时间戳. 注意 这是在 Sequelize 级别完成的(即未使用 SQL触发器 完成). 这意味着直接 SQL 查询(例如,通过任何其他方式在不使用 Sequelize 的情况下执行的查询)将不会导致这些字段自动更新. 如果不想要下面这两个字段可以设置timestamps为false sequelize.define(User, {// ... (属性) }, {timestamps: false });添加用户 user.service // 导入用户模型 const User require(../model/user.model); class UserService {// 创建用户async createUser(user_name, password) {// 插入数据新增成功后会返回该条数据的对象const res await User.create({ user_name, password });return res;}// 获取用户基本信息async getUserInfo(params { id, user_name, is_vip }) {// 处理where条件const whereOpt {};for (let key in params) {if (![undefined, null, ].includes(params[key])) {whereOpt[key] params[key];}}// 查询符合条件的第一条数据const res await User.findOne({// 指定要返回的属性attributes: [id, user_name, is_vip, createdAt, updatedAt],// where条件where: whereOpt,});return res ? res : null;} }// 导出 module.exports new UserService();user.controller /*** 处理与用户有关的请求*///导入service const { createUser, getUserInfo } require(../service/user.service);class UserController {//注册async register(ctx, next) {// 1、获取数据const requistBody ctx.request.body;// 合法性判断if (!requistBody.user_name || !requistBody.password) {console.error(用户名或密码为空);ctx.body {code: 10001, // 错误code用于定义错误类型团队内部自行约定message: 用户名或密码为空,data: null,};return;}// 合理性判断该用户是否已经存在用户名是唯一的if (await getUserInfo({ user_name:requistBody.user_name })) {ctx.body {code: 10002,message: 该用户已存在请勿重新注册,data: null,};return;}// 2、操作数据库const res await createUser(requistBody.user_name, requistBody.password);// 3、返回响应结果ctx.body {code: 0,message: 用户创建成功,data: null,};}// 登录async login(ctx, next) {ctx.body 登录;} }// 导出实例化对象 module.exports new UserController();需要注意当输入文本之类的信息时要避免字符串中的特殊字符需要将其转义为HTML实体避免恶意脚本注入。 const str scriptalert(hello world);/script; const escapedStr sequelize.escape(str); console.log(escapedStr); // 输出lt;scriptgt;alert(#x27;hello world#x27;);lt;/scriptgt;错误处理 从上面的代码可以看到对于错误处理并不完善可能会出现一些其他的错误并且如果每一个接口都要这样写的话是很难维护的因此需要一个中间件进行统一的错误处理。 在src下创建一个constant用来定义一些常量创建一个middleware文件夹用来存放错误处理的逻辑 错误类型 constant/user.err.type.js 用于记录与用户有关的错误类型 module.exports{userFormatError:{code: 10001, // 错误code用于定义错误类型团队内部自行约定message: 用户名或密码为空,data: null,},userAlreadyExisted:{code: 10002,message: 该用户已存在请勿重新注册,data: null,},userRegisterErr:{code: 10003,message: 用户注册失败,data: null,} }constant/err.type.js 错误类型的统一出口后续会加一些其他的错误类型 // 用户错误 const UserErr require(./user.err.type);module.exports {UserErr, };中间件 middleware/user.middleware.js // 导入service层 const { getUserInfo } require(../service/user.service); // 导入错误类型 const { UserErr } require(../constant/err.type);// 用户注册校验 const userRegisterValidator async (ctx, next) {// 获取入参const requistBody ctx.request.body;// 合法性判断if (!requistBody.user_name || !requistBody.password) {// console.error 打印的内容会被记录到服务器的日志里console.error(用户名或密码为空:, requistBody);//使用了Koa的错误处理机制ctx.app.emit(error, UserErr.userFormatError, ctx);return;}// 合理性判断该用户是否已经存在用户名是唯一的if (await getUserInfo({ user_name: requistBody.user_name })) {console.error(该用户已存在请勿重新注册:, requistBody);ctx.app.emit(error, UserErr.userAlreadyExisted, ctx);return;}// 验证通过后交由一个中间件处理await next(); };module.exports {userRegisterValidator, };注意 console.error 打印的内容会被记录到服务器的日志里ctx.app.emit(error, UserErr.userAlreadyExisted, ctx)使用koa提供的错误机制让 Koa 自动捕获错误并返回给客户端 使用 router/user.route.js // 注册 router.post(/register, userRegisterValidator, register);先执行userRegisterValidator中间件进行注册校验校验通过后在执行register中间件进行注册 app/index.js const app new Koa(); // koa-body中间件要在所有的路由之前 app.use(koaBody());// 中间件 app.use(userRouter.routes());// 进行统一的错误处理 app.on(error, (errType, ctx) {ctx.body errType; });module.exports app;
http://www.dnsts.com.cn/news/148974.html

相关文章:

  • 网站 在线支付功能用asp做的一个网站实例源代码
  • 网页设计制作音乐网站潮阳网站建设公司
  • 网站建设佰首选金手指二六wordpress 360急速模式打不开
  • 广西城市建设学校官方网站手机网站模板网
  • 云南网站建设价格php和网站建设
  • 襄阳网站seo技巧一个小程序一年的费用是多少
  • 网站页面html静态化是什么意思建设网站涉及的技术
  • wordpress後台建站登封seo公司
  • 站长统计导航窗口商城网站系统建设
  • 杭州有做网站深圳公众号小程序开发公司
  • 专业网站建设微信商城开发专业建设费用怎么花
  • 乌兰浩特网站建设wordpress抓取文章插件
  • 做网页用的网站wordpress 内页模板
  • 技术支持 网站建设国产做爰全免费的视频网站
  • 淘宝网站开发多少金额高级网站开发工程师 证书
  • php网站开发外包建设银行人力资源系统网站怎么进
  • 网站404页面设置郑州建设信息网打不开
  • 红色网站 推荐重庆娱乐场所最新通知
  • 网站开发菜鸟适合用什么软件郑州网站模板哪里有
  • 医院网站前置审批最快多久出来广州设计网站培训学校
  • 苍溪规划和建设局网站微信网站开发制作公司
  • 网站设计公司 长沙怎么做国外游戏下载网站
  • 做aa视频网站人社局网站建设步骤
  • 网站建设能否建立国外站网站建设的用户环境
  • 企业网站推广的名词解释青岛网站建设公司在哪
  • 溧阳手机网站哪里做东莞最大的网络公司
  • 苏宁易购网站建设情况南京需要做网站的公司
  • 网站的惩罚期要怎么做付费论坛源码
  • 网站建设捌金手指下拉八传媒公司网站建设思路
  • 如何制作微网站织梦怎么做中英文双语网站