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

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

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

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

vue中如何在自定义组件上使用v-model和.sync

自定义事件tips推荐始终使用 kebab-case 的事件名。(v-on会将事件名自动转换为小写,避免匹配不到)changeData ×change-data √自定义组件的v-model用法:父组件定义数据源(不需要定义修改数据的方法),在子组件标签上通过v-model="data...

面试官:聊聊你知道的Vue与React的区别

最近面到很多大公司的时候,小编都会碰到一个很尴尬的问题,很多大公司的技术栈都是React,但是小编学的是Vue,其实从本质上来说两者都是比较优秀的前端框架,所以有些面试官会问到Vue和React的区别。小编认真整理了一些自己所知道的Vue和React的区别,给大家分享分享。1. 模板语法 vs JS...

gitlab常用命令大全

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

掌握版本控制:Git的那些常见用法与技巧

Git作为现代开发中最常用的版本控制系统,它的普及和高效性使得程序员几乎每天都在与它打交道。无论是个人项目,还是团队协作,Git都能帮助我们追踪代码的修改历史,保证代码版本的管理井井有条,并在多人协作时有效地避免冲突。本文将分享一些常见的Git用法与技巧,帮助你更好地掌握Git的强大功能,并提升你在...

「Git迁移」三行命令迁移Git包含提交历史,分支,tag标签等信息

问题描述:公司需要将一个git远程服务器的全部已有项目迁移到一台新服务器的Gitlab中,其中需要包含全部的提交纪录,已有的全部分支与全部打tag标签,目前此工作已全部迁移完毕,特此记录一下操作步骤环境描述:1. 要迁移的远程Git:Gitblit2. 迁移目的Git:Gitlab3. 暂存代码的P...

快速掌握 Git:程序员必会的版本控制技巧

在现代软件开发中,版本控制系统(VCS)是开发人员不可或缺的工具。无论是个人项目,还是多人协作的团队开发,良好的版本控制都能确保代码管理的高效性与稳定性。而在版本控制系统中,Git 凭借其分布式、灵活性和高效性,成为了最流行的工具之一。几乎所有的开发团队都在使用 Git 来管理代码版本、协作开发和追...