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

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

ruisui884个月前 (03-01)技术分析18

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” 的相关文章

「 VUE3 + TS + Vite 」父子组件间如何通信?

组件之间传值,大家都很熟悉,涉及到 VUE3 +TS 好多同学就无从下手了,所以分享这篇文章,希望看完后提起 VUE3+TS 能够不慌不忙。平时使用的函数如:ref、reactive、watch、computed 等需要先引入才能使用,但是本篇文章介绍的 defineProps、withDefaul...

Gitlab 的使用和代码审查流程介绍

1、先简洁介绍下项目常用的信息-面板统计页面2、用户信息面板3、服务器信息4、项目信息5、重点介绍代码提交审核机制和授权合并机制开发人员推送代码的时候不能直接推送到master,否则就会报错。此时开发人员要本地新建分支然后在提交上来列出修改了哪些细节管理员可以管理这些分支合并到master6、指派合...

编码 10000 个小时后,开发者悟了:“不要急于发布!”

【CSDN 编者按】在软件开发的道路上,时间是最好的老师。根据“一万小时定律”,要成为某个领域的专家,通常需要大约一万小时的刻意练习。本文作者身为一名程序员,也经历了一万小时的编程,最终悟出了一个道理:慢即是快,重视架构设计和代码质量,确保每一行代码都经得起时间的考验。作者 | Sotiris Ko...

K8S NFS 共享存储

NFS 共享存储前面我们学习了 hostPath 与 Local PV 两种本地存储方式,但是平时我们的应用更多的是无状态服务,可能会同时发布在不同的节点上,这个时候本地存储就不适用了,往往就需要使用到共享存储了,比如最简单常用的网络共享存储 NFS,本节课我们就来介绍下如何在 Kubernetes...

数组、去重、排序、合并、过滤、删除

ES6数字去重 Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4] [...new Set([1,2,3,3,4,4])] //[1,2,3,4]2、ES6数字排序 [1,2,3,4].sort(); // [1, 2,3,4],默认是升序...

uni-app基于vue开发小程序与标准vue开发新增点

1、路由跳转传参uni.navigateTo({ url: `/pages/transition/spreadTextAction?t=${this.options.t}&rt=${this.options.rt}&l=${this.options.l}`});uni.navigateBack({...