node.js - 如何从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;
}
]
}
};
现在我正在尝试获取在before
andafter
钩子之间运行的逻辑。我尝试了以下方法:
尝试 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);
有谁知道我如何在路由和钩子之前和之后获取所有逻辑以全部执行?
提前致谢!
解决方案
如自定义服务中间件文档中所示,可以在注册服务时添加您自己的 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
。
推荐阅读
- excel - 将 Excel 连接到 Power BI 数据模型
- java - TWS Java API 编辑AddJobStreamInstanceWithVariableSubstitution
- autohotkey - AHK 脚本在每次连续按下时发送不同的按钮
- ajax - 使用ajax从json读取和显示值
- angular - 如何覆盖 ngrx 商店中的某些操作?
- sql - sql group 通过忽略大小写和后缀或最后一个字母
- r - 使用组变量创建新列
- unity3d - 从一个对象到另一个对象的光线投射
- c# - 从 C# 程序访问 C++ DLL 中的多个函数
- python - 在 Windows 上使用 Python 运行可执行文件并提供文本文件作为输入