文章目录
目录
(4.3)egg接受文件 ctx.request.files[0]
1.egg.js简介
(1)egg.js 是『约定优先于配置』的一个 Node.js web 框架
(2)Express的原班人马打造了Koa,阿里在Koa的基础之上封装出Egg,框架的命名和功能符合阿里的企业文化:egg直译为鸡蛋,轻量简洁,功能齐全,免费开源,具备一个完整生命的所有特征,为孵化伟大的互联网企业而生。
(1.1)安装egg.js框架
(1.2)约定规则
(1)app/router.js: 用于配置URL路由规则;
(2)app/controller/** : 用于解析用户的输入,处理后返回相应的结果;
(1.3)路由Router
(1)路由是描述请求URL和具体承担执行动作的Controller的对应。说的直白点,就是用户访问不同的路径时应该有不同的Controller去响应不同的内容。
(2)路由:指不同的网址去执行不同的分支或者程序
注册路由时,路由名不要和静态文件名冲突,不然的话会优先访问静态文件。
(3)egg中的路由
网络请求时后端的处理顺序:静态文件>路由匹配(按照顺序匹配)
“/*”星号路由代表所有网址都能匹配
(1.4)控制器Controller
Controller负责解析用户的输入,处理后返回响应的结果。
1.所有的Controller 文件都必须放在 app/controller目录下
//如果路由是: router.get('/hello', controller.user.news) //则控制器对应: //在controller文件夹下有一个user文件中有一个news方法 //eg: //如果路由是: router.get('/hello', controller.user.home.news) //则控制器对应: //在controller文件夹下有一个user文件夹下有一个home文件中有一个news方法
2.get请求
接收GET请求的数据:ctx.request.query 或者 ctx.query
get不关心原生AJAX
1.GET发送数据的代码
//参数直接写到url中 querystring
第一种
axios(“协议://ip:port/pathname?参数querystring“)
.then(res=>{})
第二种
axios(“协议://ip:port/pathname“,{params:{参数对象}})
.then(res=>{})
axios.get()和axios()是一样的
2.egg后端接受GET字段
this.ctx.request.query
GET能做网络请求的技术有那些?
==>
(1)浏览器地址栏可以做网络请求,前端给后端发送字段,只能发送get
浏览器的地址栏[只能]发送get请求, 接受的数据会直接读取渲染,如果解析失败会下载
(2)标签:
并且是点击事件触发了默认事件才会发送get请求发送网络请求给href的网址,后端返回的数据,接受的数据会直接读取渲染,如果解析失败会下载
3.post请求
接收POST请求的数据:ctx.request.body 而不是 ctx.body
3.1 post请求时,会有安全验证问题,简单的处理方式是关闭安全验证:
// config/config.default.js文件 //关闭csrf config.security={ csrf:{ enable:false } }
如需调整可在 config/config.default.js 中覆盖框架的默认值:
// config/config.default.js文件 module.exports = { bodyParser: { jsonLimit: '1mb', formLimit: '1mb', }, };
//路由: app.get('/projects/:projectId/app/:appId',controller.form.get ); //控制器中获取: this.ctx.params.projectId this.ctx.params.appId
axios.post(url,{user:”kangkang”,sex:”nan“})
fdata.append(“user“,”kangkang”)
fdata.append(“photo“,f1.files[0])
fdata.append(“photo“,f1.files[1])
4.获取上传的文件
(4.1)egg必须启用 file 模式
// config/config.default.js文件 config.multipart = { mode: 'file', };
(4.2)前端发送文件
//2.1 表单 <form action="/upload" method="post" enctype="multipart/form-data"> <input type="email" name="email" id="email"> <input type="password" name="password" id="password"> <input type="file" name="touxiang" id="touxiang"> <input type="submit" value="上传"> </form> //2.2 ajax let data=new FormData() data.append("email",email.value) data.append("password",password.value) data.append("touxiang",touxiang.files[0]) axios.post(url,data).then((res)=>{})
(4.3)egg接受文件 ctx.request.files[0]
对象里面有上传的文件信息,主要包括文件的临时保存路径文件的字段名大小等等
一般情况文件的临时保存路径在c盘的temp文件夹中 我们需要自己处理移动到项目文件夹中
注意点:fs模块的拷贝方法没有跨盘限制,rename方法有跨盘限制的bug
async file() { console.log(this.ctx.request.files); console.log(this.ctx.request.body); console.log(this.ctx.request.query); const { ctx } = this; const file = ctx.request.files[0]; let to = __dirname+"/../public/upload/"+ file.filename fs.renameSync(file.filePath,to) // 返回上传图片的网址 ctx.body = `http://localhost:7001/public/upload/${file.filename}`; }
5.做的xx项目注册的流程(面试题)
1.1 邮箱验证:绑定change事件 判断value是否符合邮箱正则
1.2 密码验证:密码要符合格式(自己定制的比如大小写特殊符号),两次密码要一致
1.3 昵称验证:昵称要符合格式(自己定制的比如大小写特殊符号)
2.2.2 插入数据
3.把数据POST发送给后端
4.等后端返回数据
6.做的xx项目登录的流程(面试题)
1.1 邮箱验证:绑定change事件,判断value是否符合邮箱正则
1.2 密码验证:密码要符合格式(自己定制的比如大小写特殊符号),两次密码要一致
2. POST暗文把密码发送给后端–JWT
3. 等后端返回数据
如果返回的数据包的业务码是正确,就跳转到首页页面或者其他页面
4.验证码
原文地址:https://blog.csdn.net/m0_63774574/article/details/126159633
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_33856.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!