这么多年,该学习记录了

660 阅读3分钟

1、Module '"../../../node_modules/vue/dist/vue"' has no exported member 'onMounted'.

突然就没报错了,奇了怪了
typescript: 4.7.4
vetur: v0.35.0

2、firefox中:WebRTC: ICE failed, add a STUN server and see about:webrtc for more details

3、设置margin-bottom导致底部出现空白部分

1、产生原因:没时间探究哦
2、解决方法
    - 父元素设置overflow:hidden属性

4、总是要翻阅操作手册的vue--slot

// 子组件,slot标签
<slot></slot>
<slot name="footer"></slot>
// 父组件
<div></div>
<div slot="footer"></div>

5、记不住的渐变属性属性

// 线性渐变
background-image: linear-gradient(to right, red , yellow)
// 径向渐变
radial-gradient(ellipse,#fff,#e2ecff)

6、哪些年听课走神之&、|、>>>、<<<

7、flex横向,超过部分出现滚动条

8、padding导致宽度溢出

1、产生原因:css3 box-sizing默认是content-box, 其content只包含内容的宽度,因此添加padding会导致整体宽度不对。
2、解决方法
 box-sizing: border-box;

9、不得不说的swiper组件

 1) loop状态下如何获取真实的index,swiper版本为v3
 
 

10、vuex该用还是不该用?

//

11、讨厌的滚动条

1、现象:子元素超出范围,没有滚动条
2、原因:无效bug,自己不小心设置了整个页面为overflow:hidden
3、解决方法

12、egg中的rotateCsrfSecret

egg提供了ctx.rotateCsrfSecret()重置csrfToken。

1)、HSTS

// default
hsts: {
  enable: false,
  maxAge: 365 * 24 * 3600,
  includeSubdomains: false, //可以添加子域名,保证所有子域名都使用 HTTPS 访问。
}

2)、CSRF

刷新token cookie在设置时如果没有明确expires默认时session,这个session的意思跟sessionStorage的作用时间不一致,sessionStorage只要关闭tab就不会保存数据,但cookie默认的expires值session只有关闭浏览器token才会失效重现赋值,所以在用户登录的时候就需要刷新token,egg提供了ctx.rotateCsrfSecret()重置csrfToken。

// config/config.default.js
module.exports = {
  security: {
    csrf: {
      headerName: 'x-csrf-token', // 通过 header 传递 CSRF token 的默认字段为 x-csrf-token
      queryName: '_csrf', // 通过 query 传递 CSRF token 的默认字段为 _csrf
      bodyName: '_csrf', // 通过 body 传递 CSRF token 的默认字段为 _csrf
    },
  },
};

// egg-security csrf.js
 module.exports = options => {
  return function csrf(ctx, next) {
    if (utils.checkIfIgnore(options, ctx)) {
      return next();
    }

    // 在cookie中设置token值
    ctx.ensureCsrfSecret();

    // ignore requests: get, head, options and trace
    const method = ctx.method;
    if (method === 'GET' ||
      method === 'HEAD' ||
      method === 'OPTIONS' ||
      method === 'TRACE') {
      return next();
    }

    if (options.ignoreJSON && typeis.is(ctx.get('content-type'), 'json')) {
      return next();
    }

    const body = ctx.request.body || {};
    debug('%s %s, got %j', ctx.method, ctx.url, body);
    // 判断token是否为预期
    ctx.assertCsrf();
    return next();
  };
};

3)、CSP

// 只允许本站资源
    csp: {
      enable: true,
      policy: {
          'default-src''self'
      },
    }

4)、XST

// default
methodnoallow: {
  enable: true
}

5) 钓鱼攻击

// default
exports.security = {
    domainWhiteList: []
}
// default
xframe: {
  enable: true,
  // 'SAMEORIGIN', 'DENY' or 'ALLOW-FROM http://example.jp'
  value: 'SAMEORIGIN',
}

13、''ts-node'' 不是内部或外部命令,也不是可运行的程序

1、解决方法:
  1)ts-node, typescript需要全局安装
  2)全局安装cross-env 
cross-env NODE_ENV=development nodemon --watch 'app/**/*' -e ts --exec 'ts-node' app.ts

14、Property 'app' has no initializer and is not definitely assigned in the constructor.

1、解决方法:
// tsconfig.json中添加
{
  "compilerOptions": {
    "strictPropertyInitialization": false
  }
}

15、sessionStorage、localStorage基本使用方法

1) 基本知识

  • 简单的键值存储,并且都为字符串
  • 可通过getItem, setItem获取、设置值
  • removeItem('key'), clear 删除某个键值对,或者清空所有数据
特性cookielocalStoragesessionStorage
数据的生命周期一般由服务器生成,可设置失效时间。如果是浏览器生成,默认是关闭浏览器后失效除非清除,否则永远保存仅在当前会话中有效,关闭页面或者浏览器会失效
存放数据大小4K左右5M5M
与服务器通信每次请求会携带在请求头中,若cookie保存过多会带来性能问题不参与和服务器通信不参与服务器通信
易用性需要程序员自己封装,原生的api不好用原生接口可以使用,亦可再次封装来对object和array有更好的支持

16、style-loader、css-loader、scss-loader等css预处理器到底是用来干嘛的?

  • style-loader: 将css插入到DOM中,
  • css-loader: 会有@import和url()进行处理,使webpack可以识别css模块
  • sass-loader: 加载器,使webpack可以识别sass/scss文件,默认使用node-sass编译

17、webpack的mode是什么

模式,在webpack配置中,通过选择development, production或者none之中的一个,来设置mode参数,就可以启动webpack内置在相应环境下的优化。默认值为production。

18、webpack怎么配置开发、测试、生产环境?

  • 1、vue-cli可通过.env.development、.env.test、.env.production来配置对应的环境变量
  • 2、webpack.DefinePlugin:允许创建一个在编译时可以配置的全局变量
new webpack.DefinePlugin({
  PRODUCTION: JSON.stringify(true),
  VERSION: JSON.stringify("5fa3b9"),
  BROWSER_SUPPORTS_HTML5: true,
  TWO: "1+1",
  "typeof window": JSON.stringify("object")
})

// 服务url
new webpack.DefinePlugin({
  'SERVICE_URL': JSON.stringify("http://dev.example.com")
})