当前位置:首页 > 技术分析 > 正文内容

ElectronJS开发系列:net模块请求_electron请求api

ruisui882个月前 (03-01)技术分析11

ElectronJS桌面开发过程中,我们少不了要和云端服务器进行接口交互,写习惯了web的同学,可能习惯性的用axios或者XHR向后端发起请求,但是我们会遇到跨域的问题,我们可能会按照平时的开发习惯去webpack中配置proxy,但是会发现,打包成安装包后,跨域问题又出现了,根本原因是ElectronJS打包后,这时请求的页面变成了file://协议,并且proxy只对开发生效,所以跨域还存在,这个时间解决方案有三个:

1、找运维或者后端设置允许跨域请求

2、electronjs官方提供解决方案,使用net模块发送请求

3、使用nodejs的http, https发起请求

官方推荐使用方式二,因为方法二可以兼容系统代理配置,满足抓包等调试需求。本文主要介绍net模块发起请求。

创建一个请求:

const clientRequest = net.request({
  url: 'https://www.baidu.com/user/login',
  method: 'post'
})

配置项目说明:

options (Object | string) - 如果 options 是字符串,则为请求的 URL。 如果是对象,它应该通过以下属性完全指定HTTP请求:

method string (可选) - HTTP 请求方法。 默认为GET方法。

url string (可选) - 请求URL。 必须以绝对路径形式提供,并将协议指定为http或https。

session Object (可选) - 与请求相关联的Session实例.

partition string (可选) - 与请求相关联的partition名称. 默认为空字符串. session 选项取代了 partition。 因此, 如果session是显式指定的, 则partition将被忽略.

credentials string (可选) - 可以是 include 或 omit。 是否随此请求发送 凭据。 如果设置为 include,将使用与请求相关的会话凭据。 如果设置为 omit,则不会随请求发送凭据(并且不会在 401响应的事件中触发 'login' 事件)。 这与同名的 fetch 选项的行为相同。 如果未指定此选项,则会发送来自会话的身份验证数据,同时不发送cookie(除非 设置了useSessionCookies)。

useSessionCookies boolean (可选) - 是否从提供的会话与请求一起发送cookie。 如果指定了 credentials ,则此选项没有效果。 默认值为 false.

protocol string (可选) - 可以是 http: 或 https:。 协议方案的形式为“scheme:”。 默认为 'http:'。

host string (可选) - 作为连接提供的服务器主机,主机名和端口号'hostname:port'.

hostname string (可选) - 服务器主机名.

port Integer (可选) - 服务器侦听的端口号.

path string (可选) - 请求URL的路径部分.

redirect string (可选) - 可以是 follow, error 或 manual。 当前请求的重定向模式。 当模式为 error 时,任何重定向都会被中止。 当模式为 manual 时,重定向会被取消,除非 request.followRedirect 在redirect 事件期间同步调用。 默认值为 follow.

origin string (可选) - 请求的源 URL。

设置请求头:

clientRequest.setHeader('Content-Type', 'application/json')

注册response响应事件:

clientRequest.on('response', (response) => {
      // 响应异常
      response.on('error', (err) => {
        console.log(err)
      })
      // 保存所有接收到的Buffer数据
      let allChunk = []
      let size = 0
      // 注册接收完毕事件
      response.on('end', () => {
        try {
          let buf = Buffer.concat(allChunk, size)
          console.log(buf.toString())
        } catch (e) {
          console.log(e)
          reject(e)
        }
      })
      // 注册分段数据接收事件
      response.on('data', data => {
        // @ts-ignore
        allChunk.push(data)
        size += data.length
      })
    })

ClientRequest和Response支持的所有事件可以参考官方文档。

类: ClientRequest | Electron (electronjs.org)

类:IncomingMessage | Electron (electronjs.org)

发送请求数据:

clientRequest.write(JSON.stringify(data))
clientRequest.end()

这样就可以实现使用net模块请求后端接口啦。

注意net模块只能在主进程中使用,不能在渲染进程中使用,所以需要通过ipc通讯机制,让渲染进程调用主进程中的方法请求,并返回数据。下一节将介绍主进程和渲染进程之间的通讯。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2388.html

分享给朋友:

“ElectronJS开发系列:net模块请求_electron请求api” 的相关文章

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了。本篇文章总共分两部分,望小伙伴们认真阅读。下一篇:10...

gitlab常用命令大全

GitLab常用命令大全GitLab是一个基于Git的Web平台,它不仅提供代码托管,还集成了持续集成/持续交付(CI/CD)、代码审查、问题追踪等功能。在日常使用GitLab的过程中,我们常常需要使用一系列命令来管理代码仓库、处理分支和标签等。以下是GitLab常用的Git命令大全,并附上详细解释...

迁移GIT仓库并带有历史提交记录

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。// 先用--bare克隆裸仓库 git clone git@gitee.com:xxx/testApp...

Acustica Audio 发布模拟Roland Jupiter 双声道合成器插件 TH2

福利: Acustica Audio 发布模拟Roland Jupiter 风格的双声道合成器插件 TH2 免费下载 意大利 Acustica Audio 公司发布布模拟Roland Jupiter 风格的双声道合成器插件 TH2 ,灵感来源于Acustica Audio的THING-8系列,它是...

vue v-html动态生成的html怎么加样式/事件

1、动态生成的html,样式不生效//html 布局 <view v-html="html"> {{html}} </view> //动态生成的元素 <view class="btngo" @tap="handleLink...

学前端,这30个CSS选择器,你必须熟记

你学会了基本的id,class类选择器和descendant后代选择器,然后就觉得完事了吗?如果这样,你就会错过许多灵活运用CSS的机会。虽然本文提到的许多选择器都属于CSS3,并且只能在现代的浏览器中使用,但学会这些是大有好处的。什么是CSS选择器呢?每一条css样式定义由两部分组成,形式如下:[...