修改默认的favicon

  1. 'use strict';
  2. const path = require('path');
  3. const fs = require('fs');
  4. module.exports = appInfo => {
  5. const projectName = 'cai_xiang_qing';
  6. const config = (exports = {});
  7. // 修改导航栏上面的图标 以读取网络图片的方式修改
  8. config.siteFile = {
  9. '/favicon.ico': fs.readFileSync(path.join(__dirname, '../app/public/favicon.png')),
  10. };
  11. // 用于cookie签名密钥,应更改为您自己的并保持安全
  12. config.keys = projectName + '_1614669180311_4617';
  13. // 在此处添加中间件配置
  14. config.middleware = [ 'errorHandler', 'authentication' ];
  15. // 配置 鉴权中间件
  16. config.authentication = {
  17. enable: false, // 控制中间件是否开启。
  18. // allowed: [ // allowed:不需要token验证的路由
  19. // '/api',
  20. // // '/api/v1/user/login',
  21. // ],
  22. // match: [// 设置只有符合某些规则的请求才会经过这个中间件。
  23. // ],
  24. ignore: [// 设置符合某些规则的请求不经过这个中间件。
  25. // '/test',
  26. // '/cms/login',
  27. // '/api',
  28. '/',
  29. ],
  30. };
  31. // 配置 异常中间件
  32. config.errorHandler = {
  33. // 只对 /api 前缀的 url 路径生效
  34. match: '/',
  35. };
  36. // 允许跨域 安全机制
  37. config.security = {
  38. // 如果需要针对某一路径忽略某安全选项
  39. // ignore: '/api',
  40. // 关闭 csrf
  41. // csrf: {
  42. // enable: false,
  43. // },
  44. // 跨域白名单 若用户没有配置 domainWhiteList 或者 domainWhiteList数组内为空,
  45. // 则默认会对所有跳转请求放行,即等同于ctx.unsafeRedirect(url) 等同于放开所以重定向 重定向
  46. // csrf
  47. csrf: {
  48. enable: false,
  49. // 如果需要针对某一路径忽略某安全选项
  50. // ignore: [ '/api' ],
  51. // 如果只想开启针对某一路径
  52. // match: '/example',
  53. type: 'ctoken', // 可以是ctoken、referer、all或any,默认为ctoken
  54. useSession: false, // 如果useSession设置为true,则在会话中保留秘密而不是cookie
  55. ignoreJSON: false, // 如果ignoreJSON设置为true,则跳过检查JSON请求
  56. cookieName: 'csrfToken', // csrf token的cookie名称
  57. sessionName: 'csrfToken', // csrf token的会话名
  58. headerName: 'x-csrf-token', // 请求头中csrf令牌的名称
  59. bodyName: '_csrf', // 请求body中csrf令牌的名称
  60. queryName: '_csrf', // request csrf token's name in query
  61. // 跨域白名单 若用户没有配置 domainWhiteList 或者 domainWhiteList数组内为空,
  62. // 则默认会对所有跳转请求放行,即等同于ctx.unsafeRedirect(url) 等同于放开所以重定向 重定向
  63. refererWhiteList: [ 'http://localhost:3000' ],
  64. },
  65. ssrf: {
  66. // ipBlackList: [
  67. // '10.0.0.0/8', // 支持 IP 网段
  68. // '0.0.0.0/32',
  69. // '127.0.0.1', // 支持指定 IP 地址
  70. // ],
  71. // 配置了 checkAddress 时,ipBlackList 不会生效
  72. // checkAddress(ip) {
  73. // return ip !== '127.0.0.1';
  74. // },
  75. },
  76. // 安全白名单,以 . 开头
  77. domainWhiteList: [ '*' ],
  78. };
  79. // 允许跨域的方法
  80. config.cors = {
  81. origin: 'http://localhost:3000',
  82. allowMethods: 'GET, PUT, POST, DELETE, PATCH',
  83. whiteList: [ 'http://localhost:3000' ],
  84. };
  85. // 自定义日志路径
  86. config.logger = {
  87. // 默认编码为 utf-8,可通过如下方式覆盖 以下设置成gbk:
  88. encoding: 'utf-8',
  89. // 设置输出格式为JSON,方便日志监控系统分析
  90. outputJSON: true,
  91. // 定义日志路径
  92. dir: path.join('./logs/', appInfo.name),
  93. // 应用相关日志,供应用开发者使用的日志。我们在绝大数情况下都在使用它。
  94. appLogName: 'app-log.json',
  95. // 框架内核、插件日志
  96. coreLogName: 'core-log.json',
  97. // 进程日志,框架和使用到 agent 进程执行任务的插件会打印一些日志到这里。
  98. agentLogName: 'agent-log.json',
  99. // 实际一般不会直接使用它,任何 logger 的 .error() 调用输出的日志都会重定向到这里,重点通过查看此日志定位异常。
  100. errorLogName: 'error-log.json',
  101. // 打印所有级别日志到文件中 关闭所有打印到文件的日志
  102. level: 'DEBUG',
  103. // level: 'NONE',
  104. // 终端日志级别
  105. consoleLevel: 'DEBUG',
  106. // 日志格式
  107. contextFormatter(meta) {
  108. return [
  109. meta.date,
  110. meta.message,
  111. ].join('[]');
  112. },
  113. formatter() {
  114. // 返回 console.log(`[${meta.date}] [${meta.ctx} ${meta.ctx}] ${meta.message}`);
  115. return;
  116. },
  117. };
  118. // 自定义日志
  119. config.customLogger = {
  120. // 支付
  121. payLog: {
  122. level: 'INFO',
  123. file: path.join('./pay.json'),
  124. },
  125. // 定时任务日志
  126. scheduleLogger: {
  127. // 日志级别
  128. level: 'INFO',
  129. // 自定义日志路径
  130. file: path.join('./schedule.json'),
  131. },
  132. // 请求日志
  133. requestLog: {
  134. level: 'INFO',
  135. file: path.join('./requestLog.json'),
  136. },
  137. // 响应日志
  138. responseLog: {
  139. level: 'INFO',
  140. file: path.join('./responseLog.json'),
  141. },
  142. };
  143. // 日志切割 我们也可以按照文件大小进行切割。例如,当文件超过 2G 时进行切割。默认按照天来切割
  144. config.logrotator = {
  145. // filesRotateBySize: [ // 将按大小旋转的文件列表
  146. // path.join(appInfo.root, 'logs', 'web.json'),
  147. // path.join(appInfo.root, 'logs', 'agent.json'),
  148. // path.join(appInfo.root, 'logs', 'web.log.json'),
  149. // path.join(appInfo.root, 'logs', 'schedule.json'),
  150. // // agent.json
  151. // ],
  152. // maxFileSize: 50 * 1024 * 1024, // 判断是否有文件需要旋转的最大文件大小
  153. // // filesRotateByHour: [ // 按小时轮换的文件列表
  154. // // path.join(appInfo.root, 'logs', 'common-error.log'),
  155. // // ],
  156. // hourDelimiter: '-', // 使用指定的分隔符按小时旋转文件
  157. // maxFiles: 10, // 工件按大小旋转
  158. // rotateDuration: 60000000000, // 判断文件是否需要旋转的时间间隔
  159. // maxDays: 0, // 保留max days日志文件,默认值为'31'。设置“0”以保留所有日志
  160. };
  161. // socket io 配置
  162. config.io = {
  163. // init: {}, // 设置引擎, 默认 ws 引擎
  164. namespace: {
  165. '/io': {
  166. // 这里的 auth 以及 filter 是待会会编写的两个中间件,用于不用依据自己的情况选择即可
  167. connectionMiddleware: [ 'auth' ],
  168. // packetMiddleware: ['filter'],
  169. },
  170. },
  171. };
  172. // token 配置
  173. config.jwt = {
  174. secret: 'bcrypt',
  175. expiresIn: 60 * 60 * 2, // 2小时过期
  176. };
  177. // 数据库连接
  178. config.sequelize = {
  179. datasources: [
  180. {
  181. // 挂载到ctx 的名称 ctx.model
  182. delegate: 'model',
  183. // model 文件路径 `app/model/*.js`
  184. baseDir: 'model',
  185. // 数据库类型
  186. dialect: 'mysql',
  187. // 主机地址
  188. host: '127.0.0.1',
  189. // 数据库密码
  190. password: '123456',
  191. // 端口
  192. port: 3306,
  193. // 数据库
  194. database: 'egg-mode',
  195. // 中国时区
  196. timezone: '+08:00',
  197. // 个性化配置
  198. define: {
  199. // 取消数据表名复数
  200. freezeTableName: true,
  201. // 自动写入时间戳 created_at updated_at
  202. timestamps: true,
  203. // 字段生成软删除时间戳 deleted_at
  204. paranoid: true,
  205. // 重新命名
  206. // createdAt: 'created_at',
  207. // updatedAt: 'updated_at',
  208. // deletedAt: 'deleted_at',
  209. // 所有驼峰命名格式化
  210. underscored: true,
  211. },
  212. },
  213. ],
  214. };
  215. // 文件上传表名单 覆盖整个白名单,只允许上传 '.png' 格式
  216. config.multipart = {
  217. // 文件大小
  218. fileSize: '5mb',
  219. // 文件后缀白名单
  220. whitelist: [
  221. // images
  222. '.jpg', '.jpeg', // image/jpeg
  223. '.png', // image/png, image/x-png
  224. '.gif', // image/gif
  225. ],
  226. };
  227. // 打开前置代理模式
  228. exports.proxy = true;
  229. exports.ipHeaders = 'X-Real-Ip, X-Forwarded-For';
  230. exports.hostHeaders = 'X-Forwarded-Host';
  231. // 配置文件 项目中可以 app.config 来使用
  232. const userConfig = {
  233. // myAppName: 'egg',
  234. };
  235. return {
  236. ...config,
  237. ...userConfig,
  238. };
  239. };