首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Primus和异步插件

Primus和异步插件
EN

Stack Overflow用户
提问于 2021-09-02 09:12:27
回答 1查看 55关注 0票数 1

版本: 8.0.3

环境:

  • 操作系统: macOS Big Sur 11.5.2
  • 浏览器:GoogleChromeVersion92.0.4515.159(官方版本) (x86_64)
  • Node.js: 13.14.0

嗨,

我在websockets中使用Primus,我想知道它是否支持异步插件。我看了Primus的医生,但没找到我需要的东西。

基本上,我试图向Primus构造函数传递一个异步函数,如下所示:

代码语言:javascript
复制
 this.primus = new Primus(server, {
      pathname: '/my-path', plugin: {
        'my-validator': {
          server: myAsyncPlugin //this should run only on the server
        }
      }
    });

问题是,如果我这样注册插件,它就不能工作,而且我的插件总是在其他处理程序之后被调用,但是我希望在验证一些传入参数时,在发生其他事情之前执行它。(我也看过中间件,但无法让它工作)

因此,如果我在构造函数中注册插件,然后执行以下操作,则插件将无法工作:

代码语言:javascript
复制
this.primus.on('connection', (spark) => {
      //...do stuff
 });

但是,如果我从构造函数中删除插件并使用以下代码,一切都会按预期工作,因为我使用的是异步函数,如下所示:

代码语言:javascript
复制
this.primus.on('connection', async (spark) => {
      //await myPlugin.doStuff();
      //other stuff
});

下面是示例插件代码的样子:

代码语言:javascript
复制
public doPluginStuff = (primus, options) => {
        primus.on('connection', async (spark) => {
            await exectuteAsyncStuffHere();
        });
    };

所以我很好奇是否有一种方法来实现我所需要的,或者我必须在“连接”处理程序中直接调用我的插件。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-03 19:40:16

问题根据 GitHub问题得到澄清和解决。

基本上,最好使用中间件来解决这些问题(传入参数验证),并且可以这样做:

代码语言:javascript
复制
this.primus.use(() => {
      return async (req, res, next) => {

        try {
          if (!await doStuff()) {
            res.destroy();
            return;
          }
        } catch (error) {
          res.destroy();
          return;
        }

        next();
      }
    });

另外,lib维护者给我的这个插件也是异步插件实现的一个例子,也许它会对其他人有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69027347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档