首页 > 解决方案 > 如何从feathersjs钩子中分离逻辑

问题描述

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

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

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

尝试 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);

有谁知道我如何在路由和钩子之前和之后获取所有逻辑以全部执行?

提前致谢!

标签: node.jsexpressfeathersjs

解决方案


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

before和之间是被调用after实际服务方法。对于您的示例,以下内容:

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


推荐阅读