当前位置:网站首页>egg.js框架的基本设置 及 使用
egg.js框架的基本设置 及 使用
2022-08-08 13:57:00 【z_小张同学】
引言
首先,前端向后端发送网络请求的方式有:
1、GET请求
2、POST请求
然后,能做网络请求的技术有:
1.浏览器的地址栏 --- 前端给后端发送字段,只能使用GET请求。
浏览器地址栏接受的数据会直接读取渲染,如果解析失败会下载。
2.css中的一些标签,如:
(1)img标签 --- 只能发送GET请求
(2) link标签 --- 只能发送GET请求
(3) 如background-image的url() --- 也只能发送GET请求
(4) a标签 --- 只能发送GET请求
(5) script标签的src --- 只能发送GET请求
3.既能发送GET请求又能发送POST请求的技术:
(1) form表单的提交
(2) AJAX技术,以及基于AJAX封装的框架
egg框架的下载
使用脚手架快速创建项目的指令:
npm init egg --type=simple
下载相关依赖文件的指令:
npm i
启动项目的指令:
npm run dev
egg框架的设置
egg框架的默认端口号是:7001; 即访问时在浏览器地址栏输入: http://x.x.x.x:7001
egg框架的约定规则:
1 app/router.js:用于配置URL路由规则;
2 app/controller/** :用于解析用户的输入,处理后返回相应的结果;
3 app/service/: 用于编写业务逻辑层;
4 app/public/: 用于放置静态资源;
5 config/config.{env}.js: 用于编写配置文件;
6 config/plugin.js 用于配置需要加载的插件;
router 路由:
是设置用户访问时的网址的设置:
router.get('/ajax', controller.home.index); //代表controller文件下的home文件夹里的index方法
router.post('/register',controller.home.register) //代表controller文件下的home文件夹里的register方法
Controller控制器:
Controller负责解析用户的输入,处理后返回响应的结果。
1.所有的Controller 文件都必须放在 app/controller目录下
2.支持多级目录,访问时可以通过目录名级联访问。
async index() {
const { ctx } = this;
ctx.body = 'hi, egg';
}
async register() {
const { ctx } = this;
ctx.body = 'hello world';
}
跨域 --- CORS的配置:
1.下载插件
npm i --save egg-cors
2.开启插件,在 config/plugin.js文件中配置:
cors:{
enable: true,
package: 'egg-cors',
}
3.配置插件,在config/config.default.js文件中配置:有两种方式:
方式一:默认全部可访问
config.cors = {
origin: '*',
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
};
方式二:具体指定多个网址可以访问
config.cors = {
// origin: ['http://localhost'],
origin:function(ctx) { //设置允许来自指定域名请求
console.log(ctx);
const whiteList = [网址1,网址2,网址3];
let url = ctx.request.header.origin;
if(whiteList.includes(url)){
return url;
}
return 'http://localhost' //默认允许本地请求可跨域
},
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
};
跨域 --- JSONP的配置:也有两种方式
方式一:实现JSONP接口:
在config/config.default.js文件中配置:
config.jsonp = {
callback: 'cb', // 识别 query 中的 `cb` 参数
limit: 100, // 函数名最长为 100 个字符
};
然后在router.js文件中写接口:
module.exports = app => {
const jsonp = app.jsonp();
app.router.get('/api', jsonp, app.controller.home.api);
};
方法二:直接在jsonp方法中直接配置:在router.js文件中
module.exports = app => {
const jsonp = app.jsonp({
callback: 'cb',
limit: 100,
});
app.router.get('/api', jsonp, app.controller.home.api);
};
跨域 --- 代理的配置
在controller文件夹中的home.js文件中:
async cors(){
let data=await this.ctx.curl("网址",{method:"GET",data:{count:123})
this.ctx.body=data
}
GET 获取提交的数据
GET请求传参数给后端,参数会拼接到url中,此方法的特点是速度快,但是它不安全
后端接收GET请求的数据:ctx.request.query 或者 ctx.query
router.js:
router.get('/get1', controller.home.get1);
home.js:
async get1() {
var k = this.ctx.request.query
this.ctx.body = {
info: "get1接口的数据"
}
}
(1)AJAX技术
var xhr=new XMLHttpRequest()
var url=`http://192.168.1.123:7001/get1?username=xiaozhang&pwd=123`
xhr.open("GET",url)
xhr.send()
xhr.onreadystatechange=()=>{
if(xhr.readyState==4&&xhr.status==200){
console.log(xhr.responseText)
}
}
(2)axios技术
axios("网址",{params:{username:xiaozhang,pwd:123}})
.then(res => {
console.log(res)
})
也就是将params传入的值直接拼接到网址之后的querystring部分。
POST获取提交的数据
将数据转为暗文发送,选择POST方式
后端接收POST请求的数据:ctx.request.body 而不是 ctx.body
1、post请求时,会有安全验证问题,简单的处理方式是关闭安全验证:在config/config.default.js文件中配置:
config.security={
csrf:{
enable:false
}
};
2、post数据默认大小是100kb 如需调整可在 config/config.default.js 中覆盖框架的默认值:
module.exports = {
bodyParser: {
jsonLimit: '10mb',
formLimit: '10mb',
},
};
设置POST请求:
(1)AJAX技术
var xhr=new XMLHttpRequest()
var url="http://192.168.1.123:7001/post1"
xhr.open("POST",url,true)
//这个函数接受字符串:querystring
//如果"POST"就会把这个请求的数据放在"请求数据包"-HTTPRequestMessage 的请求体中的
//如果是"GET",不会报错 但是也并不会把这个数据拼接到url中发送
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send(`userid=${userid.value}&pwd=${pwd.value}`)
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200){
console.log(xhr.responseText)
}
}
(2)axios技术
var url="http://192.168.1.123:7001/post1"
axios.post(url,{username:xiaozhang,pwd:123})
.then(res=>console.log(res))
router.js:
router.post('/post1', controller.home.post1);
home.js:
async post1() {
//1.前端POST发送给egg的参数字段
let obj=this.ctx.request.body
let query=this.ctx.request.query
console.log(obj,query)
this.ctx.body={info:"post数据",res:obj}
}
获取上传的文件
1.egg必须启用 file 模式,在config/config.default.js文件中配置:
config.multipart = {
mode: 'file',
};
2.把要给后端发送的"大量"数据:文件 处理成表单数据
var f1=document.querySelector("#f1")
var userid=document.querySelector("#userid")
var pwd=document.querySelector("#pwd")
var fdata=new FormData()
//发送的数据
fdata.append("userid",userid.value)
fdata.append("pwd",pwd.value)
//发送的文件
fdata.append("touxiang",f1.files[0])
var url="http://192.168.1.123:7001/post2"
axios.post(url,fdata)
.then(res=>console.log(res))
router.js:
router.post('/post2', controller.home.post2);
后端接收:
async post2(){
//1.前端POST发送给egg的参数字段
let ziduan=this.ctx.request.body
//2.前端POST发送给egg的参数文件
let f=this.ctx.request.files
console.log(ziduan,f)
//将接收的文件移动至指定的文件夹
if(f[0]){
let oldpath=f[0].filepath
let fname=path.basename(oldpath)
let newpath=__dirname+"/../public/upload/"+fname
fs.renameSync(oldpath,newpath)
}
this.ctx.body={info:"post2的数据"}
}
边栏推荐
- 设计一个跨平台的即时通讯系统(采用华为云ECS服务器作为服务端 )【华为云至简致远】
- 【索引】图神经论文之GCN(持更)
- 京东三面惨遭被虐,关于redis,高并发,分布式,问懵了
- 华为云弹性云服务器ECS使用【华为云至简致远】
- 【os.path】的相关用法(持更)
- R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图(点线图、line plot)、设置add参数为mean可视化不同水平均值的折线图
- flutter 身兼数职的getx —— 简介
- UnsatisfiedDependencyException: Error creating bean with name ‘
- 华谊“在劫难逃”,4年亏掉64亿
- sample function—R language
猜你喜欢
Full of dry goods, Yu Jingxin class of the Institute of Information Technology, Chinese Academy of Sciences will help you get academic research and thesis writing skills
专访|360高瀚昭:ISC十年,360数字安全大脑能够“看见”什么?
sample函数—R语言
Pretraining Weekly Issue 56: Long Text Understanding, Instant Question Answering, Mask Self-Supervision
一桩事先张扬的网红书店倒闭案
TCP补充
Verilog HDL Bits training 09 grammar foundation
【Redis】redis安装与客户端redis-cli的使用(批量操作)
从零开始,如何拥有自己的博客网站【华为云至简致远】
[Redis] Bitmap and usage scenarios of bitmap (statistics of online people and user online status)
随机推荐
跟我一起了解云耀云服务器HECS【华为云至简致远】
《预训练周刊》第56期:长文本理解、即时问答、掩码自监督
serialize 序列化原生方法
textarea 禁止拖拽
sample函数—R语言
一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
基于FPGA的FIR滤波器的实现(1)—采用fir1函数设计
logistic回归模型—基于R
项目动态|Apache Pulsar 2.10.1 版本介绍
华为云弹性云服务器ECS使用【华为云至简致远】
全网最全的PADS 9.5安装教程与资源包
基于QWebassembly的一个数据库监测工具
【小码匠自习室】ABC180-C: 马虎是小孩的天性吗?
【Redis】位图以及位图的使用场景(统计在线人数和用户在线状态)
腾讯,投了个 “离诺贝尔奖最近的华人”
删库不易,跑路更难
兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00
pip install xxx 出现 AttributeError: ‘tuple’ object has no attribute ‘read’ 错误
MySQL:锁机制 |表级锁、行级锁 | 排它锁、共享锁 | 间隙锁
itk中生成drr整理