node+TS后端开发实践(环境篇)
主要技术栈:框架选择express,TS语言开发,TS在JS基础上增加了多种数据类型,包括其提供的接口编程、类型检查等特性,非常适合编写后端程序。
运行:ts-node + webpack + gulp
部署:webpack + pm2 / supervisor
全局安装Typescript即拥有一个编译器,可以使用tsc编译TS(ts后缀)为浏览器识别的原生js,使用”tsc -w”即可监听目录变化自动编译,源目录及输出目录等配置在项目根目录下tsconfig.json进行配置。
但是以上并不太适合实际开发中使用,我最终选择的方案为ts-node作为实例化编译器,开发模式下可在package.json配置”dev”: “ts-node-dev 相对目录启动文件路径”,安装devDependencies下依赖ts-node-dev,这样运行npm run dev即可启动项目并在终端查看实时代码错误检查。
编译生产使用webpack方案,webpack.config.js配置:
12345678910111213141516171819202122232425262728293031 ...
移动端(ios)日期显示错误问题
在ios中日期格式显示不能为”-“,否则会出现错误,H5开发中记得使用正则规避。
123const date = '2019-01-01'const newDate = new Date(date.replace(/-/g, '/'))
此问题只出现在ios,安卓和PC都能识别。
Linux开机自启Tomcat最简单方法
1. 修改开机自启脚本rc.local:vim /etc/rc.d/rc.local添加如下内容(java安装路径和tomcat路径根据实际修改):
123export JAVA_HOME=/home/shawn/jdk1.8.0_171/home/shawn/tomcat7/bin/startup.sh start
2. 修改rc.local为可执行1chmod 777 /etc/rc.d/rc.local
关于forEach循环的思考与优化
当年懵懂无知的我被问到这个问题时,脑袋一片空白,因为我一度认为forEach可能只是为了方便书写所创造出来的语法糖,在业务代码中也经常使用,但没有思考过它存在的问题,本文旨在记录自己的心路历程,抛砖引玉,如果对你有所帮助那就更好啦。
那么回到标题,首先forEach是不能使用任何手段跳出循环的,为什么呢?继续往下看。
我们知道forEach接收一个函数,它一般有两个参数,第一个是循环的当前元素,第二个是该元素对应的下标,手动实现一下伪代码:
12345Array.prototype.myForEach = function (fn) { for (let i = 0; i < this.length; i++) { fn(this[i], i, this); }}
forEach是不是真的这么实现我无从考究,但是以上这个简单的伪代码确实满足forEach的特性,而且也很明显就是不能跳出循环,因为根本没有办法操作到真正的for循环体。
后来经过查阅文档,发现官方对forEach的定义根本不是我认为的语法糖,它的标准 ...
前端三剑客各种知识点梳理汇总 2
JS 相关补充
JavaScript 由以下三部分组成:
ECMAScript(核心):JavaScript 语言基础
DOM(文档对象模型):规定了访问HTML和XML的接口
BOM(浏览器对象模型):提供了浏览器窗口之间进行交互的对象和方法
JS内置对象
数据封装类对象:Object、Array、Boolean、Number、String
其他对象:Function、Arguments、Math、Date、RegExp、Error
ES6新增对象:Symbol、Map、Set、Promises、Proxy、Reflect
一些规范
代码段使用花括号{}包裹
变量和函数在使用前进行声明
以大写字母开头命名构造函数,全大写命名常量
规范定义JSON对象,补全双引号
用{}和[]声明对象和数组
高性能编写注意
遵循严格模式:”use strict”;
将js脚本放在页面底部,加快渲染页面
将js脚本将脚本成组打包,减少请求
使用非阻塞方式下载js脚本
尽量使用局部变量来保存全局变量
尽量减少使用闭包
使用 window 对象属性方法时,省略 window
尽量减少对象成员嵌套
...
JavaScript波澜起伏的一生
JavaScript俨然是目前热度最高的编程语言之一,作为前端开发在工作中总离不开写JS,但有些疑问总在我脑海中:它与Java到底什么关系?所谓的ES、TS又是什么?在查阅一番资料后,我以拙略的文笔记录下这篇文章,一起走进JS的前世今生吧。
LiveScript说到JavaScript的起源,就不得不和web的发展联系到一块,起初由于网页的大小和复杂性不断提升,在频繁的表单验证之间存在的数据交换过程只会带来负担,于是美国网景公司(Netscape)开始着手开发一种浏览器上的脚本语言,用于处理简单的验证,它就是LiveScript,但这并不是最终发布时的正式名称。
Java’s Script ?我们都知道Java与JavaScript语言本身并无关系,网上普遍说法是JavaScript为了蹭Java的热度而如此命名,但这种说法有失偏颇,因为当时Java也是才刚刚推出的编程语言,其火爆也应该是后话了。
实际上因为Sun公司所大肆宣传的“一次编写,到处运行”对网景公司影响很大(想想这种客户端脚本语言不也是一样只要有浏览器环境就可以到处运行吗,比如现在流行的利用前端技术进行跨终端开发,我认为本 ...
人生苦短,ES6我只想现在就了解他
从零开始的 ECMAScript 6 不完全攻略,轻扫盲向
0. 块级作用域
let变量在不同块级作用域中不影响:
1234for (let i = 1; i < 3; i++) { console.log(i);}console.log(i); // 此行将报错: ReferenceError 未定义
重复声明变量会导致无法编译:
12let a = 1;let a = 2; // 此行将报错
一次声明后无法再次赋值的const类型:
12const PI = 3.1415926; // 必须在声明时就立刻赋值PI = 2; // 此行将报错,const类型值不可改变
const声明并非不可修改,而是不可重新赋值
12345const k = [] // 引用类型依然可以修改k.b = 1;k.a = 2;console.log(k); /& ...
记一次将js模块发布到npm包过程
什么是npm?npm是nodejs上集成的原第三方包管理工具
0. 注册npm账号https://www.npmjs.com/
1. 查看npm镜像,如果之前更换过,需要重置npm config get registry
1.1 重置镜像路径(墙内的同学都习惯用淘宝镜像,这将不能访问npm账号)npm config set registry https://registry.npmjs.org
1.2 之后有必要可以再切回来npm config set registry https://registry.npm.taobao.org
2. 创建你的npm包在项目的git仓库下执行:
npm init
根据提示输入npm包信息,package.json创建完毕。
name:项目的包名,先在npm官网搜索下,或者npm install你想用的包名,以免名称已存在。version:版本号,以后更新也要用到。entry point:也就是项目main入口,默认根目录的index.js,调用这个包首先访问的文件。其他选项不是很重要,后面也可以直接修改package.json文件。
3. 在 ...
前端三剑客各种知识点梳理汇总 1
CSS JS 常见总集篇
掌握html语义化,避免通篇div扎实css基础 1. 提升可访问性; 2. SEO; 3. 结构清晰,利于维护;
1. css页面布局题目一:高度已知,三栏布局,左右栏固定宽度,中间自适应
1. float浮动布局
2. absolute绝对定位布局,左右固定好width,左侧设置left:0,中间设置left与right为左右width宽度,右侧设置right:0
3. flex布局,左右宽度固定,中间设置flex:1
4. table表格布局,左右设置宽度固定
5. grid网格布局
---- 课题延伸 ----
优缺点 / 比较
1. 缺点:float脱离文档流,需要处理清除浮动
优点:兼容性好
2. 缺点:子元素都将脱离文档流,使用性比较差
优点:快捷,不容易出问题
3. 缺点:存在兼容性问题
优点:较新型解决方案,解决以上两种布局的不足
4. 缺点:存在历史诟病问题
优点:使用简单,兼容性好
5. 缺点:可能存在兼容问题
优点:较新型解决方案,可实现多种复杂布局, ...
ElasticSearch小试牛刀:各种查询语句整理
部分笔记 不完全指北 ElasticSearch版本更迭很快,所作记录可能有些偏差
查看所有索引GET /_cat/indices?v
创建一个索引demoPUT one_index
{
"mappings": {
"type_name": {
"properties": {
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
...