如何将 feathersjs 客户端用于 websocket 和 restful 连接?

How to use feathersjs client for both websocket and restful connection?

我已经在我的 feathersjs 服务器上配置了 primus 和 restful 服务。下面是配置代码。

app
  .use(compress())
  .options('*', cors())
  .use(cors())
  .use('/', serveStatic(app.get('public')))
  .use(bodyParser.json())
  .use(bodyParser.urlencoded({extended: true}))
  .configure(hooks())
  .configure(rest())
  .configure(swagger({
    docsPath: '/docs',
    uiIndex: path.join(__dirname, '../public/docs.html'),
    info: {
      title: process.env.npm_package_fullName,
      description: process.env.npm_package_description
    }
  }))
  .configure(primus({
    transformer: 'websockets',
    timeout: false
  }, (primus) => {
    primus.library();
    primus.save(path.join(__dirname, '../public/dist/primus.js'));
  }))

在客户端,下面是使用 Primus 作为连接方法的代码,在这种情况下是 websocket。在这种情况下,如何在客户端使用 restful ? feathersjs 中定义的服务方法对于 websocket 和 restful 是相同的。我怎样才能进行特定的 restful 调用而不是 websocket?

const feathers = require('feathers-client');
const rest = require('feathers-rest/client');
const Primus = require('../public/dist/primus.js');
let primus = new Primus('http://localhost:3030');
let app = feathers()
  .configure(feathers.hooks())
  .configure(feathers.primus(primus));

我已经阅读了https://docs.feathersjs.com/clients/rest.html的说明,我知道如何分别请求rest或websocket连接。我不知道如何将它们合并到一个客户端。

你不应该这样做。 Feathers 完全通过 REST Websockets 工作,没有必要在同一个应用程序中同时使用两者。通常我们建议尽可能使用 Websocket 连接,因为一旦建立连接,您还会收到 real-time 事件和请求更快。

客户端上的连接配置真正做的是初始化一个标准服务,该服务在调用 app.service('anything') 时使用该连接与远程服务对话。如果绝对必要,您可以 import and instantiate one of the REST clients 并在您的应用程序上手动将其注册为服务:

const SuperAgentClient = require('feathers-rest/lib/client/superagent');
const superagent = require('superagent');

app.use('/myservice', new SuperAgentClient({
  name: 'servicename',
  connection: superagent,
  base: 'http://my-server.com'
}));