V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cuqk
V2EX  ›  问与答

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

  •  
  •   cuqk · 2020-07-25 21:08:12 +08:00 via Android · 2016 次点击
    这是一个创建于 1580 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    9 条回复    2020-07-26 00:29:41 +08:00
    mxT52CRuqR6o5
        1
    mxT52CRuqR6o5  
       2020-07-25 21:18:09 +08:00
    main process 调用 new BrowserWindow 时 webPreferences.nodeIntegration 传个 true
    cuqk
        2
    cuqk  
    OP
       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
        3
    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
        4
    Jirajine  
       2020-07-25 21:35:31 +08:00 via Android
    你写 electron 的时候相当于同时写两个应用:前端运行在浏览器中,后端跑在 node 上。其中后者才能调用系统相关的 API 。
    你应该把逻辑放在后端,然后前端通过 IPC 调用,nodeintegration 是很不推荐的做法。
    mxT52CRuqR6o5
        5
    mxT52CRuqR6o5  
       2020-07-25 22:50:59 +08:00
    看了一下应该是要在 webpack 里加上 externals: {electron:'commonjs2 electron'}
    当然就像楼上说的那样,如果有安全考虑的话不是很推荐,特别是你这种都涉及到 redis 访问了
    Tyaqing
        6
    Tyaqing  
       2020-07-25 22:57:29 +08:00 via iPhone
    你应该在后端链接 Redis,前端连接不就暴露权限了么
    cuqk
        7
    cuqk  
    OP
       2020-07-25 23:16:59 +08:00 via Android
    @Tyaqing 因为不考虑安全因素,所以可以直接把 redis 配置直接放在前端
    cuqk
        8
    cuqk  
    OP
       2020-07-25 23:18:55 +08:00 via Android
    @mxT52CRuqR6o5 好的,我试试你说的这种方式,谢谢!
    mxT52CRuqR6o5
        9
    mxT52CRuqR6o5  
       2020-07-26 00:29:41 +08:00 via Android
    @cuqk 我 5 楼的那个应该是解决不了问题的,需要看一下 react 的 webpack 配置
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:20 · PVG 10:20 · LAX 18:20 · JFK 21:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.