火舞云霄

火舞云霄 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

火舞云霄 提出了问题 · 9月2日

thinkphp 有没有可以自动维护数据库的扩展

image.png

ecshop 这种的, 执行个命令就可以更新数据库表结构, 这样正式环境 部署就不需要自己去改表结构
php版本太低了想换成熟悉的tp

关注 1 回答 0

火舞云霄 提出了问题 · 5月27日

问下 easyswoole gin springboot 学那个啊, 我看压测都差不多.

我是php的

关注 4 回答 3

火舞云霄 提出了问题 · 4月3日

gin 为什么插入了2次记录

// 日志记录到文件
func LogerMiddleware() gin.HandlerFunc {
   dir := file.GetPwd()
   logFilePath := fmt.Sprintf("%s/%s%s", dir, setting.AppSetting.RuntimeRootPath, setting.AppSetting.LogSavePath)
   logFileName := "gin"

   // 日志文件
   fileName := path.Join(logFilePath, logFileName)
   fmt.Println("LogerMiddleware: " + fileName)

   // 写入文件
   src, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0777)
   if err != nil {
       fmt.Println("err", err)
   }
   // 实例化
   logger := logrus.New()
   //设置日志级别
   logger.SetLevel(logrus.DebugLevel)
   //设置输出
   logger.Out = src

   // 设置 rotatelogs
   logWriter, err := rotatelogs.New(
       // 分割后的文件名称
       fileName+".%Y-%m-%d.log",
       // 生成软链,指向最新日志文件
       rotatelogs.WithLinkName(fileName),
       // 设置最大保存时间(7天)
       rotatelogs.WithMaxAge(7*24*time.Hour),
       // 设置日志切割时间间隔(1天)
       rotatelogs.WithRotationTime(24*time.Hour),
   )

   writeMap := lfshook.WriterMap{
       logrus.InfoLevel:  logWriter,
       logrus.FatalLevel: logWriter,
       logrus.DebugLevel: logWriter,
       logrus.WarnLevel:  logWriter,
       logrus.ErrorLevel: logWriter,
       logrus.PanicLevel: logWriter,
   }

   logger.AddHook(lfshook.NewHook(writeMap, &logrus.TextFormatter{
       TimestampFormat: "15:04:05",
   }))

   return func(c *gin.Context) {
       //开始时间
       startTime := time.Now()
       //处理请求
       c.Next()
       //结束时间
       endTime := time.Now()
       logger.Infof("%3d | %8v | %13s | %s | %s | %s | %s | %s |",
           c.Writer.Status(),
           endTime.Sub(startTime),
           c.ClientIP(),
           c.Request.Method,
           c.Request.RequestURI,
           c.Request.Proto,
           c.Request.UserAgent(),
           c.Request.Referer(),
       )

   }
}
time="16:48:31" level=info msg="200 | 4.000226207s |     127.0.0.1 | GET | /gapi/MenuGoods/login | HTTP/1.0 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 Edg/80.0.361.69 |  |"
time="2020-04-03T16:48:31+08:00" level=info msg="200 | 4.000226207s |     127.0.0.1 | GET | /gapi/MenuGoods/login | HTTP/1.0 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 Edg/80.0.361.69 |  |"
time="16:54:12" level=info msg="200 | 4.000376069s |     127.0.0.1 | GET | /gapi/MenuGoods/login | HTTP/1.0 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 Edg/80.0.361.69 |  |"
time="2020-04-03T16:54:12+08:00" level=info msg="200 | 4.000376069s |     127.0.0.1 | GET | /gapi/MenuGoods/login | HTTP/1.0 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 Edg/80.0.361.69 |  |"

关注 3 回答 2

火舞云霄 赞了文章 · 2019-10-28

13 个 JS 数组精简技巧,一起来看看。

作者:Duomly
译者:前端小智
来源:dev.to

点赞再看,养成习惯

本文 GitHubhttps://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料。欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。


数组是 JS 最常见的一种数据结构,咱们在开发中也经常用到,在这篇文章中,提供一些小技巧,帮助咱们提高开发效率。

1. 删除数组的重复项

图片描述

2. 替换数组中的特定值

有时在创建代码时需要替换数组中的特定值,有一种很好的简短方法可以做到这一点,咱们可以使用.splice(start、value to remove、valueToAdd),这些参数指定咱们希望从哪里开始修改、修改多少个值和替换新值。

图片描述

3. Array.from 达到 .map 的效果

咱们都知道 .map() 方法,.from() 方法也可以用来获得类似的效果且代码也很简洁。

图片描述

4.置空数组

有时候我们需要清空数组,一个快捷的方法就是直接让数组的 length 属性为 0,就可以清空数组了。

图片描述

5. 将数组转换为对象

有时候,出于某种目的,需要将数组转化成对象,一个简单快速的方法是就使用展开运算符号(...):

图片描述

6. 用数据填充数组

在某些情况下,当咱们创建一个数组并希望用一些数据来填充它,这时 .fill()方法可以帮助咱们。

图片描述

7. 数组合并

使用展开操作符,也可以将多个数组合并起来。

图片描述

8.求两个数组的交集

求两个数组的交集在面试中也是有一定难度的正点,为了找到两个数组的交集,首先使用上面的方法确保所检查数组中的值不重复,接着使用.filter 方法和.includes方法。如下所示:

图片描述

9.从数组中删除虚值

在 JS 中,虚值有 false, 0''null, NaN, undefined。咱们可以 .filter() 方法来过滤这些虚值。

图片描述

10. 从数组中获取随机值

有时我们需要从数组中随机选择一个值。一种方便的方法是可以根据数组长度获得一个随机索引,如下所示:

图片描述

11.反转数组

现在,咱们需要反转数组时,没有必要通过复杂的循环和函数来创建它,数组的 reverse 方法就可以做了:

图片描述

12 lastIndexOf() 方法

图片描述

13.对数组中的所有值求和

JS 面试中也经常用 reduce 方法来巧妙的解决问题

图片描述

总结

在本文中,介绍了13个技巧,希望它们可以帮助编写简洁代码,如果你还有更好的办法,欢迎留言讨论。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

原文:
https://dev.to/duomly/13-usef...

交流

阿里云最近在做活动,低至2折,有兴趣可以看看:https://promotion.aliyun.com/...

干货系列文章汇总如下,觉得不错点个Star,欢迎 加群 互相学习。

https://github.com/qq449245884/xiaozhi

因为篇幅的限制,今天的分享只到这里。如果大家想了解更多的内容的话,可以去扫一扫每篇文章最下面的二维码,然后关注咱们的微信公众号,了解更多的资讯和有价值的内容。

clipboard.png

每次整理文章,一般都到2点才睡觉,一周4次左右,挺苦的,还望支持,给点鼓励

查看原文

赞 77 收藏 61 评论 2

火舞云霄 赞了文章 · 2019-10-21

elementUi+Vue+i18n+Vue-cli 实现前端国际化

  • 首先安装vue-i18n
算了,这个不多讲,看官网:http://kazupon.github.io/vue-i18n/zh/
  • main.js 中引入并注册
import i18n from './lang';
// 设置国际化
Vue.use(ElementUI, {
  i18n: (key, value) => i18n.t(key, value)
});

new Vue({
  el: '#app',
  i18n,
  render: h => h(App)
});
  • src目录中建立语言包文件夹 lang/index.js
//index.js文件
import Vue from 'vue';
import VueI18n from 'vue-i18n';
import enLocale from 'element-ui/lib/locale/lang/en';
import zhLocale from 'element-ui/lib/locale/lang/zh-CN';

Vue.use(VueI18n);

const messages = {
  en: {
    message: {
      hello: '{msg} world'
    },
    ...enLocale
  },
  zh: {
    message: {
      hello: '{msg} 世界'
    },
    ...zhLocale
  }
};
const i18n = new VueI18n({
  locale: 'zh', // set locale
  messages // set locale messages
});

export default i18n;
  • 效果初探,随便找个页面试试,此时页面会显示 hello 世界
<p>{{ $t('message.hello', { msg: 'hello' }) }}</p>
<p v-html="$t('message.hello')" />
Look,是不是很简单,已经有了雏形,开始精加工
  • 一般来讲,要翻译的文字比较多,所以最好为每门语言建立独立文件管理. 新建文件 lang/zh.js、 lang/en.js, 写入一些测试数据
//zh.js
export default {
  app: {
    LanguageChage: '语言切换',
    editPassword: '修改密码',
    signOut: '登出'
  }
};
//en.js
export default {
  app: {
    LanguageChage: 'Language switching',
    editPassword: 'Change Password',
    signOut: 'Sign out'
  }
};
  • 下面去封装一个组件,用来切换语言,并将语言状态保存到cookie和Vuex中。
在封装组件之前,咱们先去封装一个方法,保存语言状态值, 更新之前的 lang/index.js 文件,主要是 getLanguage 方法
import Vue from 'vue';
import VueI18n from 'vue-i18n';
import Cookies from 'js-cookie';
import enLocaleElement from 'element-ui/lib/locale/lang/en';
import zhLocaleElement from 'element-ui/lib/locale/lang/zh-CN';
import zhLocale from './zh';
import enLocale from './en';

Vue.use(VueI18n);

// 语言环境信息
const messages = {
  en: {
    ...enLocale,
    ...enLocaleElement
  },
  zh: {
    ...zhLocale,
    ...zhLocaleElement
  }
};

// 获取语言环境并保留状态
export function getLanguage() {
  const cookieLanguage = Cookies.get('language');
  if (cookieLanguage) return cookieLanguage;

  const browerLanguage = (navigator.language || navigator.browserLanguage).toLowerCase();
  const locales = Object.keys(messages);

  for (const locale of locales) {
    if (browerLanguage.indexOf(locale) > -1) {
      return locale;
    }
  }
}

const i18n = new VueI18n({
  locale: getLanguage(),
  messages,
  fallbackLocale: 'zh'
});

// 热更新
if (module.hot) {
  module.hot.accept(['./en', './zh'], function() {
    i18n.setLocaleMessage('en', require('./en').default);
    i18n.setLocaleMessage('zh', require('./zh').default);
  });
}

export default i18n;
vuex仓库中增加language字段, 一般大家应该都是用vuex的吧,这里我用vuex的module模式来写, 其实随意,都可以。
// app.js  这是我的store文件

import { getLanguage } from '@/lang/'; // 引入之前写好的方法
// state里增加language字段
const state = {
  language: getLanguage()
};

const mutations = {
  SETLANGE: (state, language) => {
    state.language = language;
    Cookies.set('language', language);
  }
};


const actions = {
  setLanguage({ commit }, language) {
    commit('SETLANGE', language);
  }
};

export default {
  namespaced: true,
  state,
  mutations,
  actions
};
  • OK, 准备工作已完成,下面封装切换语言的组件, 新建一个 launageSelect.vue 文件
<template>
  <el-dropdown trigger="click" class="international" @command="handleSetLanguage">
    <div>
      语言切换
    </div>
    <el-dropdown-menu slot="dropdown">
      <el-dropdown-item :disabled="language==='zh'" command="zh">
        中文
      </el-dropdown-item>
      <el-dropdown-item :disabled="language==='en'" command="en">
        English
      </el-dropdown-item>
    </el-dropdown-menu>
  </el-dropdown>
</template>

<script>
export default {
  computed: {
    language() {
      return this.$store.getters.language; //这里我用getters处理,代码不贴了,你么你随意
    }
  },
  methods: {
    handleSetLanguage(lang) {
      // 通过VueI18n的根实例设置当前的语言环境  不懂请看文档 http://kazupon.github.io/vue-i18n/zh/api/#%E9%9D%99%E6%80%81%E5%B1%9E%E6%80%A7
      this.$i18n.locale = lang;
      this.$store.dispatch('app/setLanguage', lang);
      this.$message({
        message: 'Switch Language Success',
        type: 'success'
      });
    }
  }
};
</script>

  • 到此为止,基本的国际化框架就已经完成,可以直接去使用了。

  • 等等,还没完,接下来才是最重要的。
一般vue项目的菜单都是在route中去写的,此时无法直接使用模板语法进行国际化,所有咱们还要封装一个方法,用来处理菜单标题
/**
 *生成字符- 国际化使用
 * @param {*} lanuageKey 语言对象键值
 * @param {*} title 要转换的值
 */
export function generateText(lanuageKey, title) {
  const key = this.$te(`${lanuageKey}.${title}`);
  if (key) {
    return this.$t(`${lanuageKey}.${title}`);
  }
  return title;
}
找到渲染菜单的文件,引入刚刚的方法,进行菜单标题格式化
  <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
    <el-menu-item
      :index="resolvePath(onlyOneChild.path)"
      :class="{'submenu-title-noDropdown':!isNest}"
    >
      <item
        :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)"
        :title="generateText('route', onlyOneChild.meta.title)"
      />
    </el-menu-item>
  </app-link>

  //引入方法
  import { generateText } from '@/utils/';

  //methods里调用下
   methods: {
    generateText
  }
此时你的配置应该是这样的
// zh.js
export default {
  route: {
    home: '首页',
  }
}

//router.js   (title中的home要和你的zh.js里的key值对应)
  {
    path: '/',
    component: Layout,
    redirect: '/home',
    children: [{
      path: 'home',
      name: 'Home',
      component: () => import('@/views/home/index'),
      meta: { title: 'home', icon: 'home' }
    }]
  }
此时你得菜单项便可以正常渲染了
  • 到此便正式结束,其实还蛮简单的,当然i18n有很多个语法,大家自行查阅文档,谢谢!
查看原文

赞 10 收藏 9 评论 0

火舞云霄 关注了用户 · 2019-10-07

波罗学 @poloxue

公众号《码途漫漫》,当前专注 Go 语言,博客 poloxue.com

关注 22

火舞云霄 提出了问题 · 2019-10-07

解决goland 无法解析 go.mod里的包

go1.13版本

第三方 加入到mod里的包 都是红色的,不能跟踪过去

图片描述

关注 2 回答 1

火舞云霄 提出了问题 · 2019-01-11

vue-echarts.js 怎么使用啊. 不知道咋调用

vue 啥的 都引入了

不知道怎么调用echarts啊啊啊,

<script data-original="/mint/vue-echarts.js"></script>



new Vue({
        el: '#app',
        data: {},
        mounted() {
            this.drawLine();
        },
        components:{
            VueECharts,
        },
        methods: {
            drawLine() {


                console.info(this);
                console.info(this.$echarts);

                return;
                // 基于准备好的dom,初始化echarts实例
                var myChart = this.$echarts.init(document.getElementById('main'))
                // 绘制图表
                myChart.setOption({
                    title: {text: '在Vue中使用echarts'},
                    tooltip: {},
                    xAxis: {
                        data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
                    },
                    yAxis: {},
                    series: [{
                        name: '销量',
                        type: 'bar',
                        data: [5, 20, 36, 10, 10, 20]
                    }]
                });
            }
        }
    })

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

关注 1 回答 0

火舞云霄 提出了问题 · 2018-12-20

解决phpstorm2018.3 deployment 上传问题

文件上传时,
会把我本地所有的修改过的文件都上传上去,
但是我只需要当前修改的这一个文件上传.
如何解决这个问题啊

关注 2 回答 1

火舞云霄 提出了问题 · 2018-08-12

phpstorm 里 config.php 设置为不显示 开启了ftp上传怕误传

phpstorm 里 config.php 文件能否 设置为不显示 开启了ftp上传怕误传

关注 2 回答 1

认证与成就

  • 获得 3 次点赞
  • 获得 12 枚徽章 获得 0 枚金徽章, 获得 2 枚银徽章, 获得 10 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2015-02-04
个人主页被 188 人浏览