如何将逻辑与 feathersjs 钩子分开

How to separate logic from feathersjs hooks

有谁知道如何将路由逻辑与 feathersjs 挂钩分开?现在,我所有的应用程序逻辑都在钩子之前或之后的 feathersjs 中,但我想将其分开。现在我有前后挂钩:

module.exports = {
  before: {
    all: [
      (hook) => {
        console.log('--in before hook--')
        return hook
      }
    ]
  },
  after: {
    all: [
      (hook) => {
        console.log('--in after hook--')
        return hook;
      }
    ]
  }
};

现在我正在尝试获取在 beforeafter 挂钩之间运行的逻辑。我尝试了以下方法:

尝试 1 - 路由中的 console.log 被执行,但是 before 和 after 钩子没有被执行。

// in jokes.service.js

app.get('/jokes', (req, res) => {
  console.log('In between before and after')
  res.json({
    msg: "SUCCESS"
  })
})

app.use('/jokes', createService(options));

const service = app.service('jokes');

service.hooks(hooks);

尝试 2 - 路由中的 console.log 没有执行,但是执行了 before 和 after 钩子。

// in jokes.service.js

app.use('/jokes', createService(options));

app.get('/jokes', (req, res) => {
  console.log('In between before and after')
  res.json({
    msg: "SUCCESS"
  })
})
const service = app.service('jokes');

service.hooks(hooks);

有谁知道我如何在路由中获取逻辑以及所有执行的挂钩之前和之后的逻辑?

提前致谢!

custom service middleware documentation 所示,可以在注册服务时添加自己的 Express 中间件。请记住,钩子将独立于传输(它们将通过 HTTP、websockets 和任何其他传输机制工作),其中 Express 中间件仅适用于 HTTP 请求。

beforeafter之间是被调用的actual service method。对于您的示例,以下内容:

const beforeMiddleware = (req, res, next) => {
  console.log('Middleware before service')
  next()
}

const afterMiddleware = (req, res, next) => {
  console.log('Middleware after service')
  next()
}

app.use('/jokes', beforeMiddleware, createService(options), afterMiddleware);

const service = app.service('jokes');

service.hooks({
  before: {
    all: [
      (hook) => {
        console.log('in before hook')
        return hook
      }
    ]
  },
  after: {
    all: [
      (hook) => {
        console.log('in after hook')
        return hook;
      }
    ]
  }
});

将打印

Middleware before service
in before hook
in after hook
Middleware after service

请求时/jokes.