请教在 Electron 中遇到的 Redis 连接问题

2020-07-25 21:08:12 +08:00
 cuqk

我在用 Electron + React 写一个桌面端程序。使用了 ioredis 库连接 Redis 。

在 Electron 的启动代码中加入了连接 Redis 的操作,可以正常连通。

问题是:因为在页面 React 代码段中无法获得启动时获取到的 Redis 连接实例,所以我把连接操作直接放在了 React 方法中。但在运行时会报错,提示 net 组件不存在

有参考过 Medis 一类的 Redis 连接工具的写法,它们是在 Vue 文件中直接使用自己封装的 Redis 操作工具类,我的做法跟他们类似。

请问一下这会是什么原因,是还需要增加什么依赖或者操作?

如果上述信息不足以判断问题,我再继续补充完善信息。

2050 次点击
所在节点    问与答
9 条回复
mxT52CRuqR6o5
2020-07-25 21:18:09 +08:00
main process 调用 new BrowserWindow 时 webPreferences.nodeIntegration 传个 true
cuqk
2020-07-25 21:26:49 +08:00
@mxT52CRuqR6o5 感觉您的解答。我加上以后,仍然报一样的错,错误堆栈是:

TypeError: net_1.createConnection is not a function
at StandaloneConnector.js:58
at Item.push../node_modules/process/browser.js.Item.run (browser.js:153)
at drainQueue (browser.js:123)
mxT52CRuqR6o5
2020-07-25 21:35:30 +08:00
首先在 renderer process 的控制台中尝试执行 require('net').createConnection,看看能不能调用得到
然后再看看 react 代码的 require('net')(或是 import 了 net 模块的语句)的编译结果,看看有没有正确的把 require 保留下来,我看这个错误堆栈很可能是 webpack 直接自己把 require('net')自己编译成 webpackrequire 进行处理了,应该是需要调整 webpack 配置让其不对 require('net')进行编译
Jirajine
2020-07-25 21:35:31 +08:00
你写 electron 的时候相当于同时写两个应用:前端运行在浏览器中,后端跑在 node 上。其中后者才能调用系统相关的 API 。
你应该把逻辑放在后端,然后前端通过 IPC 调用,nodeintegration 是很不推荐的做法。
mxT52CRuqR6o5
2020-07-25 22:50:59 +08:00
看了一下应该是要在 webpack 里加上 externals: {electron:'commonjs2 electron'}
当然就像楼上说的那样,如果有安全考虑的话不是很推荐,特别是你这种都涉及到 redis 访问了
Tyaqing
2020-07-25 22:57:29 +08:00
你应该在后端链接 Redis,前端连接不就暴露权限了么
cuqk
2020-07-25 23:16:59 +08:00
@Tyaqing 因为不考虑安全因素,所以可以直接把 redis 配置直接放在前端
cuqk
2020-07-25 23:18:55 +08:00
@mxT52CRuqR6o5 好的,我试试你说的这种方式,谢谢!
mxT52CRuqR6o5
2020-07-26 00:29:41 +08:00
@cuqk 我 5 楼的那个应该是解决不了问题的,需要看一下 react 的 webpack 配置

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693100

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX