杂类

在logs文件中查看,报的是以下错误:2021-11-1617:49:210[Note]InnoDB:Mutexesandrw_locksuseWindowsinterlockedfunctions2021-11-1617:49:210[Note]InnoDB:Useseventmutexes2021-11-1617:49:210[Note]InnoDB:Compressedtablesusezlib1.2.112021-11-1617:49:210[Note]InnoDB:Numberofpools:12021-11-1617:49:210[Note]InnoDB:UsingSSE2crc32instructions2021-11-1617:49:210[Note]InnoDB:Initializingbufferpool,totalsize=16M,instances=1,chunksize=16M2021-11-1617:49:210[Note]InnoDB:Completedinitializationofbufferpool2021-11-1617:49:210[Note]InnoDB:128outof128rollbacksegmentsareactive.2021-11-1617:49:210[Note]InnoDB:Creatingsharedtablespacefortemporarytables2021-11-1617:49:210[Note]InnoDB:Settingfile'C:\xampp\mysql\data\ibtmp1'sizeto12MB.Physicallywritingthefilefull;Pleasewait...2021-11-1617:49:210[Note]InnoDB:File'C:\xampp\mysql\data\ibtmp1'sizeisnow12MB.2021-11-1617:49:210[Note]InnoDB:Waitingforpurgetostart2021-11-1617:49:210[Note]InnoDB:10.4.21started;logsequencenumber300610;transactionid1702021-11-1617:49:210[Note]Plugin'FEEDBACK'isdisabled.2021-11-1617:49:210[Note]InnoDB:Loadingbufferpool(s)fromC:\xampp\mysql\data\ib_buffer_pool2021-11-1617:49:210[Note]ServersocketcreatedonIP:'::'.解决办法:在一个cmd窗口中,输入以下命令:mysqld–-console–-skip-grant-tables–-skip-external-locking然后不要关闭刚刚打开的那个cmd窗口,接着在打开一个cmd窗口,输入以下命令:mysqlcheck-r--databasesmysql--use-frm接着,将两个cmd窗口全部关闭,重新在xmapp中开启mysql。

Node.js

大纲:小组介绍作品名称小组名称小组成员指导教师作品介绍前端:各个板块以及设计思路、实现方式。后端:各个功能、模块的介绍、设计思路。采用技术前端采用的各个库后端采用的各个库该程序如何运行程序下载小组介绍:作品名称:石家庄财经职业学院-新校区小组名称:True不会写网页组小组成员:甄雨锋、郑泽田、贾龙涛指导教师:刘天宇作品介绍:前后端都实现了响应式布局。0x01前端:欢迎页设计思路:JS:生成400个div,将它添加到父盒子中,并且它们都有一个相同的类名,并且为每个盒子设置一个随机的动画完成周期,以及延迟多少秒后进行动画。css:为js生成带标签的盒子,设置动画,在2000px外的距离,归属到它自身的位置(0px)。js:在14秒之后,差不多动画特效完成了,为父盒子添加一个类名。css:执行父盒子指定的特效,从0px在归属到2000px外的位置(弹出特效)。网站首页设计思路:使用art-template模板引擎,先设计一个模板,那么这里的公共模板为顶部导航栏以及页脚。在首页中,继承父类模板,在父类的body中,添加了轮播图等内容。学院新闻:后端读取到数据库内容后,渲染给客户端,并且在底部添加了分页功能,每页只展示3个文章。校园风光设计思路:这里使用了fullpage这个js库,一共有5个大页,每个大页后有两个子页,每一页展示的是同一个校园角落。校园风光设计思路:这里使用了svg,基于图片之上,通过坐标轴点缀的圆形,点击该按钮,即可弹出该位置的名称以及图片。留言板设计思路:这里的留言内容数据库中的留言内容,在发表时,采用了axios向后端发起请求,在后端接收到请求后,会将该评论添加到数据库中,如果添加成功,服务端则返回一个成功码,然后通过jQuery将表单中的val值,添加到评论展示中,如果后端添加失败,则提示添加失败。404页设计思路:如果所有的路由都不匹配,则将404页返回客户端,并且在5秒后返回首页。0x02后端:登录页设计思路:这里的背景有白天和夜晚两张图片,进行轮流轮播,在登录时,如果账号正确,那么则添加session信息,并且进入后台,如果不正确,则提示账号密码错误。登录拦截如果在没有登录的情况下,直接访问后台的管理页面,是不允许的,它会重定向到登录页,如果在已经登录的情况下(客户端有cookie信息),那么在访问后台,是免登陆的。文章管理设计思路:该页面可以进行增删改操作,点击编辑,会基于现在文章内容之上,进行修改。并且可以自定义封面,如果不选择封面,那么会使用默认的封面,编辑器采用的是富文本编辑器,比较简介,而且功能全。发布文章页面,和该页面类似,只不过是发布文章。评论管理设计思路:该页面可以删除已经发布的评论。前端设置设计思路:该页面可以更改欢迎页的封面图。实现思路:直接将上传的文件,更改名称,并移动到目标文件夹,替换掉原有的文件。采用技术:该网站为动态网站,可通过后端操作,设置前端内容,接下来详情介绍。0x01前端:运用技术:cssjsBootstrapBootstrapAnimatejQuerywowart-templateaxiosfullpage0x02后端:后端语言为:node,用的是Express框架。运用技术:第三方库第三方库Expressexpress-sessionmongooseformidablemongoose-sex-pagemomentaxiosart-template0x03数据库:数据库为:MongoDB,使用的是Mongoose封装后的。如何运行该网站?1.安装Node.js环境2.安装MongoDB数据库,并且将其配置完成后使用mongod命令打开数据库。3.第一次运行将以下代码取消注释4.将终端定位到项目首级,输入nodeapp命令,终端显示添加成功的信息后,按两次Ctrl+C将程序停止运行。5.然后将刚刚取消的注释在注释掉。6.直接使用nodeapp命令运行程序即可。源码下载:http://yq2048.cn/web/21web/web.zip

Node.js

官网文档:https://github.com/sideway/joi/blob/v13.6.0/API.md注意:该文章只适用于13.6.0版本,最新版本语法已经变了,所以安装时需要指定版本。作用:它是一个验证器,可以验证传入的值是否合法,验证格式可以自定义,它提供了很多方法,可以直接调用方法来验证。0x01使用:1、下载Joi模块npminstalljoi@13.6.02、引入Joi模块constJoi=require("joi");3、定义验证规则:声明一个变量(schema),这个变量的值是一个对象,在对象内部定义的就是验证规则。属性:表单传过来的name名称值:验证内容,例如最小长度,最大长度…如果被验证的对象中出现规则以外的内容,验证就会失败。constschema={username:Joi.string().min(2).max(20).required().error(newError("传入的数据不合法!")),//...}注意:必须将类型写在最前面,不同类型有不同的验证规则。使用规则验证表单传过来的数据:使用Joi.validate(被验证的对象,验证规则)方法来验证。Joi.validate(req.body,schema);它返回一个Promise对象。如果验证通过:返回被验证的表单数据对象(req.body这个对象)。如果验证失败:抛出一个异常。asyncfunctionrun(){try{constt=awaitJoi.validate(req.body,schema);console.log(t);}catch(e){console.log(e.message)}}run();0x02方法:string():字符串类型。alphanum():只能包含az、A-Z、0-9,不能包含其他特殊字符。regex():这个方法接收一个正则表达式,用这个参数来验证这个字段。min():字符串的小长度。max():字符串的最大长度。required():这个属性是必填属性。[Joi.string(),Joi.number()]:这两种类型都可以,如果不是这两种,则不通过。email():必须符合邮箱格式。error(newError("错误信息")):如果不符合验证规则,则会抛出这个错误。valid('a','b'):只能是这个参数内中的值,不能是其他的。number():数值类型。integer():必须是整数。min():数值最小数(注意:不是长度)max():数字最大数(注意:不是长度)

2021-8-17 125 0
2021-8-17 122 0
Node.js

该模块为加密模块:加密方式:哈希加密(hash)。哈希加密是单程加密方式,只可以加密,不可以解密。注意:该方法都是异步API,需要使用await来等待一下,不要忘记await需要配合async使用哦!!0x01密码加密步骤:1、首先下载bcrypt这个库。npminstallbcrypt2、然后导包。constbcrypt=require("bcrypt");3、使用genSalt()方法生成‘盐’。参数:加密复杂程度,越大越复杂。默认为:10,当然,越大也越慢。letsalt=awaitbcrypt.genSalt(10);4、使用hash()方法对密码进行加密。第一个参数:用户输入的明文密码。第二个参数:使用genSalt()生成的‘盐’。letpass=awaitbcrypt.hash("明文密码",salt);0x02密码比对:虽然不能解密,但是它提供了一个密码比对的方法,可以判断密码输入的是否正确。方法:awaitbcrypt.compare('明文密码','加密密码');明文密码就是用户现在输入的密码。加密密码是从数据库中读取出来的已经被加密的密码。返回值:返回一个Boolean值。比对正确:true比对错误:false//查询数据库User.findOne({//只查询用户输入的账号account:req.body.account})//由于bcrypt.compare使用了await,所以这里使用async。.then(asyncfunction(ret){//判断查询返回的是否是null,如果是null就是没有数据,那么返回账号密码错误。if(ret){//如果返回的对象,就是存在,然后密码比对,返回Boolean值。if(awaitbcrypt.compare(req.body.password,ret.password)){//返回true说明比对成功res.send({message:"登录成功!",code:0});//返回false说明比对失败,返回账号密码错误}else{res.send({message:"账号或密码错误!",code:1});}}else{res.send({message:"账号或密码错误!",code:1});}});

2021-8-17 95 0
2021-8-17 112 0
Node.js

0x01path模块方法:返回路径中的最后一部分:path.basename(p,[ext]);//p:路径//ext:输入一个文件后缀名,如果匹配到该路径中有该后缀名,则省略该后缀名,只显示文件名。path.basename("c:a/b/index.js",[ext]);//index.jspath.basename("c:a/b/index.js",".js");//index返回路径中代表文件夹的部分:path.dirname(p);path.dirname("c:a/b/index.js");//c:a/b返回路径中文件的后缀名:path.extname(p);path.dirname("c:a/b/index.js");//.jspath.dirname("c:a/b/index.");//.path.dirname("c:a/b/index");//返回空字符串判断参数是否一个绝对路径:path.isAbsolute(path);path.isAbsoulute("c:/a/b/index.js");//true-绝对路径path.isAbsoulute("./c/index.js");//false-相对路径将路劲解析为一个对象:path.parse(pathString);path.parse("c:/a/b/index.js");//解析出来的对象{root:'c:/',dir:'c:/a/b',base:'index.js',ext:'.js',name:'index'}路径拼接:path.join();0x02dirname和filename下面这两个属性是Node中的全局变量:__dirname获取当前该文件,所在目录的,绝对路径,(不包含自己)__filename获取当前该文件,所在的,绝对路径,(包含自己)在文件操作中,使用相对路径是不可靠的,因为在Node中,操作的路径被设计为,相对于执行node命令所处的路径。例如:这个文件夹中有一个app.js,还有一个public文件夹,里面有一个a.txt。需要在app.js中将a.txt中的数据读出来。如果使用相对路径,那么当我退出32593这个文件夹,跳转到上一级目录:Users文件夹,执行node32593/app.js那么这个时候就会在Users这个文件中中找a.txt。为了解决这个问题,只需要将把相对路径更改为绝对路径就可以了。这个时候就可以使用__dirname来动态获取该文件现在所在的目录。补充:模块中的标识路径(require)和这里的路径没关系,不受影响。constfs=require("fs");constpath=require("path");fs.readFile(path.join(__dirname,"./public/a.txt"),"utf8",function(err,data){if(err){returnconsole.log("读取失败!",err);}console.log(data);});

2021-8-17 109 0
Node.js

0x01什么是中间件?在默认情况下,当客户端发送请求时,服务器会进行依次到下的匹配,匹配成功就不再向下匹配。而中间件可以拥有继续向下匹配的权限,这需要在参数中添加一个参数:nextnext是一个封装好的方法,它可以控制是否继续向下匹配。向下匹配的前提是:该中间件没有返回给客户端数据,否则就会报错了。这就相当于一个生产线,当手机进入第一个工序时,这个工序对它进行加工,加工完成后继续向下流(这就相当于next),如果这个工序检测到了这个产品不合格,那么就不让它流入下一个了。在下面这个案例中,首先匹配到第一个get。这个get并没有结束返回,而是调用next()方法继续向下匹配。然后匹配到第二个get,在同一次请求中,req对象时同一个,然后返回给客户端req对象中的foo属性,执行完毕。app.get("/admin",function(req,res,next){req.foo="bar";next();});app.get("/admin",function(req,res,next){res.send(req.foo);});0x02app.use()中间件用法:在Express框架中,提供了app.use()这个方法,这个方法不区分到底是get还是post请求,它会匹配所有请求方式。它可以传入一个请求地址,然后这个中间件只针对这个请求地址有效。也可以不传入请求地址,就只写一个回调函数,然后它会不管你是什么请求地址,都会经过这个中间件。该中间件只针对/admin地址有效,然后向下匹配第二个中间件。app.use("/admin",function(req,res,next){//处理内容next();//向下匹配});该中间价不管是什么请求,都会经过这里。app.use(function(req,res,next){//处理函数next();});0x03错误处理中间件:在程序执行的过程中,不可避免的会出现一些无法预料的错误,比如文件读取失败,数据库连接失败,错误处理中间件是一个集中处理错误的地方。它一共有四个参数:err、req、res、nextapp.use(function(err,req,res,next){res.status(500).send("服务器发生未知错误:",err.message);})//当发生错误时,会执行这个错误处理中间件。错误处理中间件只能捕获到同步代码出错(thrownewErroe(“错误信息”))。如果在异步代码中出现了错误,这时需要手动触发错误处理中间件,这时调用next()方法并且将错误信息当作参数即可。app.get("/index",function(req,res,next){thrownewError("出现错误了.");next("出现错误了.");//同步代码可以手动抛出一个异常让错误处理中间件来捕获,也可以手动调用next()。})app.get("/index",function(req,res,next){fs.readFile("./a.txt","utf8",function(err,data){if(err){next(err);//在异步代码中只能通过next()来调用错误处理中间件。}})})注意:错误处理中间件一般写在最后面。

2021-8-17 115 0