引言

首先,前端向后端发送网络请求的方式有:

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.querythis.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.bodylet query=this.ctx.request.queryconsole.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.filesconsole.log(ziduan,f)//将接收的文件移动至指定的文件夹if(f[0]){let oldpath=f[0].filepathlet fname=path.basename(oldpath)let newpath=__dirname+"/../public/upload/"+fnamefs.renameSync(oldpath,newpath)}this.ctx.body={info:"post2的数据"}}

egg.js框架的基本设置 及 使用相关推荐

  1. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

    转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...

  2. 【笔记-node】《Egg.js框架入门与实战》、《用 React+React Hook+Egg 造轮子 全栈开发旅游电商应用》

    20210226-20210227:<Egg.js框架入门与实战> 课程地址:https://www.imooc.com/learn/1185 第一章 课程导学 01-01 课程介绍 一. ...

  3. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计 1

    前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...

  4. 如何使用node.js后端框架中的egg.js框架

    安装egg 我们推荐直接使用脚手架,只需几条简单指令,即可快速生成项目(npm >=6.1.0): mkdir egg-example && cd egg-example npm ...

  5. Node.js 应用开发详解04 3 大主流系统框架:由浅入深分析 Express、Koa 和 Egg.js

    上一讲我们没有应用任何框架实现了一个简单后台服务,以及一个简单版本的 MSVC 框架.本讲将介绍一些目前主流框架的设计思想,同时介绍其核心代码部分的实现,为后续使用框架优化我们上一讲实现的 MSVC ...

  6. Serverless 实战 —— Serverless + Egg.js 后台管理系统实战

    Serverless + Egg.js 后台管理系统实战 作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个非常优秀的企业级框架,它 ...

  7. 如何使用egg.js开发后端,包含连接数据库

    一 .创建项目: 1.使用egg.js框架提供的脚手架搭建: npm i -g egg-init egg-init egg-demo --type=simple //--type=simple可以去掉 ...

  8. egg.js java 生产数据_Egg 2.15.0 发布,阿里开源的企业级 Node.js 框架

    值得注意的变化 新特性 [EXPERIMENT FEATURE] 支持单线程模式 Bug 修复 [TYPE] 支持config.static.dir的数组 [TYPE] 修复中间件类型不兼容 [TYP ...

  9. 知乎: 如何评价阿里开源的企业级 Node.js 框架 egg? #18

    知乎: 如何评价阿里开源的企业级 Node.js 框架 egg? #18 搬自我在知乎的问答: https://www.zhihu.com/question/50526101/answer/14495 ...

最新文章

  1. 深度学习 Optimizer 梯度下降优化算法总结
  2. 说人话教AI打游戏,Facebook开源迷你版星际争霸,成果登上NeurIPS 2019
  3. 全网最细节的sds讲解,轻松拿下offer
  4. .net core 使用Redis的发布订阅
  5. oracle 10修改字符集,Oracle 10g修改数据库字符集
  6. Java习题>|异常>|throw自定义异常小案例
  7. 欧姆龙rxd指令讲解_欧姆龙plc的指令-机电之家网PLC技术网
  8. 手机号格式校验(大陆,香港)
  9. 最新详细VMware虚拟机下载与安装
  10. Java实现MD5和国密SM3摘要算法
  11. bmp文件c语言压缩算法,BMP文件数据压缩与解压缩方法.pdf
  12. 支付系统中如何应用加密方式的
  13. 做一套给三星手机用的导航栏图标(伪装Windows10移动版)
  14. Android微信支付订单支付失败的问题
  15. 高级计算机网络实验——c++实现ping工具
  16. vscode代码拼写检查插件的使用(超详细)
  17. 【CCF会议期刊推荐】CCF推荐国际学术期刊/会议(人工智能)
  18. Docker学习1——Docker入门
  19. 终于解决困扰我多年的问题 浙江绍兴这边 洋拉毛树 树名原来叫 毛白杨 春天种子满天飞
  20. 注销后计算机会重启么,注销与重新启动计算机有什么不同?

热门文章

  1. Linux 修改apt-get为国内镜像源
  2. 兴文石海旅游策划方案——石来运转天下览!
  3. Qt实现中国象棋:(三)棋盘绘制的详细分析及实现
  4. 嵌入式操作系统介绍分析
  5. 图像处理(八):线段检测之Hough变换
  6. 该怎么职场中进行有效沟通工作?
  7. 中断服务子程序 ISR
  8. C语言网——【求[X,Y]内被除3余1并且被除5余3的整数的和】
  9. 文档转换工具JODConverter简介
  10. Downie 4 4.6.12 MAC上最好的一款视频下载工具