feathersjs - 为什么feathersjs app.setup方法会破坏websocket连接
问题描述
在 App.js 文件中,这些是最后几行:
app.configure(initialise)
app.configure(enableCronJobs)
module.exports = app
初始化来自这里(在 app.js 文件中)
const initialise = require('./initialise')
初始化文件如下所示
module.exports = async (app: App) => {
try {
app.setup()
await app.get('sequelizeSync')
const { total: RolesCount } = await app.service('roles').find()
if (RolesCount === 0) {
await Promise.all(
roles.map(role =>
app
.service('roles')
.create(role, { useSequelizeModel: true }),
),
)
}
} catch (e) {
console.log('initialise', app, e) // eslint-disable-line
}
}
我在控制台中收到以下错误(并且重复):
error: Page not found {"type":"FeathersError","name":"NotFound","code":404,"className":"not-found","data":{"url":"/socket.io/?EIO=3&transport=websocket"},"errors":{}}
实际的创建查询功能工作并将数据插入到数据库中。
尽管 websocket 连接已断开,只要我在初始化函数中有 app.setup() 方法,任何客户端都无法连接到该服务。
我需要调用 app.setup() 函数以便数据库准备就绪,否则我会出现以下错误:
relation {TABLE} does not exist
欢迎任何建议、提示等。
问候,埃米尔
解决方案
setup
旨在使用server
您的代码中缺少的参数调用。当你打电话时app.listen
,app.setup
被调用所以你不想在setup
这里打电话。
相反,您可以app.setup
用自己的版本替换,确保调用旧setup
函数。
module.exports = async (app: App) => {
const oldSetup = app.setup;
app.setup = function (...args) {
const result = oldSetup.apply(this, ...args);
try {
await app.get('sequelizeSync')
const { total: RolesCount } = await app.service('roles').find()
if (RolesCount === 0) {
await Promise.all(
roles.map(role =>
app
.service('roles')
.create(role, { useSequelizeModel: true }),
),
)
}
} catch (e) {
console.log('initialise', app, e) // eslint-disable-line
}
return result;
}
}
推荐阅读
- ios - 动画 UIStackView 子视图在左上角出现故障
- ios - iOS:存储在安全飞地中的密钥不支持解密
- python - 跳入我的 pygame 程序不起作用 - 跳到屏幕顶部并进入平台下方
- java - 如何编写 Drake 排序算法以在 Java 中对数组进行排序?
- c++ - CMakeLists.txt。从程序输出设置宏
- toit - 如何轻松地在 toit 控制台上发出和显示指标
- java - 在Java中实现工厂方法
- python - 如何在 Python 中运行具有固定效果的 diff-in-diff?
- jmeter - 使用 JSR223 PostProcessor 从未排序的数组列表中获取最大值
- amazon-web-services - 我可以将列表用作 AWS 资源标签的值吗?