egg
egg copied to clipboard
🥚 Born to build better enterprise frameworks and apps with Node.js & Koa
我想给`egg-mysql`提交一个PR,但对实现方案有疑问,想先征求一下大佬的意见 ## 背景问题 我在`CabloyJS`中,需要将MySQL的“事物隔离”变量改为`READ COMMITTED`。改变MySQL的变量有两个可选的作用域:`GLOBAL、SESSION` 如果使用`GLOBAL`,只需执行一次,但必须使用系统账号。如果使用`SESSION`,则必须在每次建立数据库连接时,执行修改MySQL变量的SQL语句 ## CabloyJS中的做法 `CabloyJS`通过重写模块`ali-rds`的`RDSClient.prototype.getConnection`,实现了在建立数据库连接时,执行自定义的SQL语句 具体源代码,请参见链接:[https://github.com/zhennann/egg-born-backend/blob/e32c7f4faca6c689f17be89c9fb0bde9f25f0767/lib/module/version/database.js](https://github.com/zhennann/egg-born-backend/blob/e32c7f4faca6c689f17be89c9fb0bde9f25f0767/lib/module/version/database.js) ## 目标 我想把CabloyJS中的解决方案,提炼出更通用的形式,并向`egg-mysql`提交PR。但转念一想,这个解决方案是通过重写模块`ali-rds`的方法实现的,而模块`ali-rds`也是阿里的开源项目。因此,如果让`ali-rds`提供类似的机制(在建立数据库连接时可以执行自定义SQL语句),是否会更优雅? ## 可选方案 因此,暂有以下两个思路,请大佬帮忙定夺: 1)不修改`ali-rds`,只在`egg-mysql`中提供`RDSClient.prototype.getConnection`重写功能 2)先由`ali-rds`提供执行自定义SQL语句机制,再在`egg-mysql`中使用此机制
## What happens? 想在 egg-passport-xxx 单元测试里覆盖一个场景:如果 /passport/xxx/callback?code=xxx 被调用了,那么程序会去做一个登录验证。大概是这样写(以egg-passport-github举例说明): ```javascript it('should authenticate', () => { const ctx = app.mockContext({}); app .httpRequest() .get('/passport/github/callback?code=1234') .expect(302); assert(ctx.isAuthenticated()); }); ``` 看上去意图是正确的,但是跑起来会报错: ``` TypeError: this.req.isAuthenticated is...
According to https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin#Examples > Limiting the possible Access-Control-Allow-Origin values to a set of allowed origins **requires code on the server side to check the value of the Origin request header,...
## What happens? 为什么egg-sequelize 会在configWillLoad之前读取执行? ## 复现步骤,错误日志以及相关配置 [](https://imgchr.com/i/VUbLGR) ## 相关环境信息 - **操作系统**:mac - **Node 版本**:10 - **Egg 版本**:2.22.2
https://github.com/eggjs/egg-security/pull/79
debug模式断点调测controller,60s超时断开: ``` ERROR 15048 [egg-mongoose] mongodb://xxx disconnected ERROR 9320 nodejs.ClusterClientNoResponseError: client no response in 62812ms exceeding maxIdleTime 60000ms, maybe the connection is close on other side. at Timeout._onTimeout (D:\xxx\node_modules\cluster-client\lib\leader.js:77:23) at...
``` config.rpc = { server: { namespace: 'com.alipay.sofa.rpc.protobuf', port: 2509, // 服务发布在那个 tcp 端口下(默认是 12200) version: '1.0', group: 'SOFA', }, }; ``` 如果是有多个rpc服务的话,这里的port 必须要指定吗,怎么能自动分配端口号?
## What happens? 服务端引用egg-socket.io 但是不注册任何事件 客户端用socket.io-client连接上,emit一个事件,服务崩溃 ## 建议解决 判断注册事件的handler是否存在,再进行调用 ## 复现步骤,错误日志以及相关配置 ## 相关环境信息 - **操作系统**:win7 - **Node 版本**:v12.19.0 - **Egg 版本**: v2.30.0
## sequelize动态修改数据库信息出现数据混乱 - 我在配置文件中没有设置database,而是通过登录用户访问接口的时候修改sequelize的信息,就rest api的表现来说并没有什么问题,但是在加入job以后就出现了很奇葩两种的情况: - 第一种 1. 调用api1,期望数据应该存储到db1 2. job切换了链接信息到db2 3. api1的数据最终存储在了db2 - 第二种 1. job切换到db1执行,开启事务,期望data1、if(true)data2都存入db1, 2. job切换到了db2,if(true)变成了false,导致data2没有存储 ## 猜测 - sequelize并没有数据库连接池,这样也可以解释上面的问题 **以上问题仅仅是猜测,没有实际** ## 可能的解决方案 - sequelize如果没有数据库连接池,加上这个功能会不会直接修复这个问题 - 分的库比较少的话,是否可以通过一个库对应一个worker实现...