封面图

安全地在前后端之间传输数据 - 「2」注册和登录示例

2021-04-19
阅读 9 分钟
9.2k
为了不切换开发环境,前后端都使用 JavaScript 开发。采用了前后端分离的模式,但没有引入构建过程,避免项目分离,这样在 VSCode 中可以把前后端的内容组织在同一个目录下,不用操心发布位置的问题。具体的技术选择如下:
封面图

安全地在前后端之间传输数据 - 「1」技术预研

2021-04-15
阅读 8 分钟
12.6k
已经不是第一次写这个主题了,最近有朋友拿 5 年前的《Web 应用中保证密码传输安全》来问我:“为什么按你说的一步步做下来,后端解不出来呢?”加解密这种事情,差之毫厘谬以千里,我认为多半就是什么参数没整对,仔细查查改对了就行。代码拿来一看,傻眼了……没毛病啊,为啥解不出来呢?

边城客栈的 2020

2021-01-01
阅读 2 分钟
4k
接口,本身只是种约定,向来只是声明,没有实现……可是 Java 和 C# 相继推出了“接口默认方法”的概念,让接口从纯粹的抽象变得有血有肉。接口的默认方法是什么鬼,接口还是接口吗?—— 这是 2020 年“边城客栈”的第一篇文章,现实世界对新冠病毒全力以赴地围追堵截时,我们在开发的世界“抓鬼”。

数组去重(JavaScript 为例)

2020-09-15
阅读 9 分钟
4.6k
数组去重,就是在数组中查找相同的元素,保留其中一个,去除其他元素的程。从这句话揭示了数组去重的两个关键因素:找到重复项去除重复项本文告诉你在遇到去重问题时该如何思考,并以 JavaScript 为例,进行详细解释。使用 JavaScript 示例主要是因为它环境比较好找,而且直接对象 (Plain Object) 用起来很方便。JavaScr...

默认值+TS类型约束提高数据处理成功率

2020-06-28
阅读 4 分钟
8.2k
我们在处理数据时,常常会遇到某项数据,或者属性是 undefined,从而引起中断性错误,造成数据处理失败。解决这一问题最直接的办法就是在使用前判断是否 undefined ,但是如果每一个数据使用前都进行判断,非常繁琐,而且容易遗漏。所以这里给大家介绍两个办法:

还搞不懂闭包算我输(JS 示例)

2020-06-18
阅读 3 分钟
8.7k
A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment).

JavaScript 和 TypeScript 的封装性 —— 私有成员

2020-06-08
阅读 6 分钟
5.4k
JavaScript 使用了基于原型模式的 OOP 实现,一直以来,其封装性都不太友好。为此,TypeScript 在对 JavaScript 类型进行增强的同时,特别关注了“类”定义。TS 的类定义起来更接近于 Java 和 C# 的语法,还允许使用 private、protected 和 public 访问修饰符声明成员访问限制,并在编译期进行检查。

离开后端说前端加密都是空谈

2020-05-28
阅读 4 分钟
14.2k
最近有朋友在使劲研究如何不使用 HTTPS 的情况下保护用户密码安全。暂且不说研究过程,但结论是要保障安全必须后端参与,使用非对称加密算法 —— 如此一来,不如直接用 HTTPS 更简单便捷有保障。使用免费 SSL 证书,一年一换,运维稍微麻烦一点,访问稍微慢一点(证书认证过程好像会慢一些),但至少是专业的,比自己研究...

前后端分离:分离开发,一体发布

2020-05-10
阅读 4 分钟
3.6k
前后端分离开发实践了很久了,前两天需要把一个项目上线,准备 SSL 证书时发现,居然需要申请 3 个证书(1 年期免费的证书只能对单个子域名申请),这 3 个域名是:

改进异步封装:处理带返回值的异步调用

2020-04-25
阅读 4 分钟
5.4k
最近几篇文章都跟微信小程序开发有关,所以有人就问:“小程序不懂啊,能不能写点别的?”。其实不用太在意“小程序”这件事情,因为“小程序”在文章中只是一个开发场景,我们实际解决的问题并非只在小程序中才会遇到,而解决问题的手段完全与小程序无关!

代码审查,异步调用的常见问题剖析

2020-04-12
阅读 4 分钟
3.9k
首先,最直观的问题:缩进太深。缩进最深的地方是 24 个空格,也就是 6 层。一般我们认为 3 层以内的缩进比较容易阅读,超过 3 层应该考虑使用“Extract Method”方法进行重构。

Proxy 封装微信小程序的异步调用

2020-04-09
阅读 2 分钟
5.7k
上回写到: 没看上回的同学,在这里:在微信小程序中使用 async/await {代码...} {代码...} 这不已经封装过了吗? 这回写的是不一样的封装。因为,一个小程序里要写好多个 toAsync 调用,真的很烦呐! 能不能一次封装,到处调用?能!把所有用到的方法都在初始化的时候封装起来。可是,难免会有遗漏。 能不能一次封装,...

VSCode 和它的插件们

2020-03-20
阅读 7 分钟
8.9k
工欲善其事,必先利其器。软件开发者不仅需要提升自己的软实力,也需要找到趁手的工具。今天要介绍的主角是 Visual Studio Code,简称 VSCode,来自微软。

在微信小程序中使用 async/await

2020-03-10
阅读 6 分钟
50.3k
微信小程序中有大量接口是异步调用,比如 wx.login()、wx.request()、wx.getUserInfo() 等,都是使用一个对象作为参数,并定义了 success()、fail() 和 complete() 作为异步调用不同情况下的回调。

接口默认方法是什么鬼

2020-03-08
阅读 9 分钟
6.9k
接口之所以成为接口,就在于它没有实现,只是声明。但后来一切都变了,Java 里出现了默认方法,C# 也出现了默认方法。接口已经不像传统意义上的接口,其概念开始向抽象类靠近,一个纯抽象的东西,突然出现了实体,于是开始傻傻分不清了。

ASP.NET Core 2.2 下插件化开发的改进

2019-03-23
阅读 2 分钟
4.3k
笔者在 Asp.Net MVC 插件化开发简化方案 研究了基于 .NET Framework 的 ASP.NET 插件化开发之后,又在 ASP.NET Core 2.0 下进行插件化开发 中研究了基于 ASP.NET Core 2.0 的插件化开发,以及在 ASP.NET Core 2.0 中基于 Razor Page 的插件化开发。不过最近在基于 .NET Core 2.1 的插件化开发时遇到个新问题:

边城工具集:绘图及标注工具

2018-12-17
阅读 5 分钟
6.3k
写文档、写博客难免需要绘图,笔者在前端时间写专栏《JavaScript 全栈工程师养成记》 的时候,就使用了大量的绘图工具来绘制插图,受到读者们的要求和鼓励,决定将自己使用的绘图工具和方法展示出来,供大家参考、批评、指正。

揭密 Vue 的双向绑定

2018-10-05
阅读 7 分钟
10.8k
Vue 中需要输入什么内容的时候,自然会想到使用 <input v-model="xxx" /> 的方式来实现双向绑定。下面是一个最简单的示例

Vue.js 十五分钟入门

2018-09-11
阅读 4 分钟
12.3k
TypeScript 为 JavaScript 带来静态类型检查,让 JavaScript 编写中大型应用的时候可以应用工具来避免部分错误。

边城工具集:Fiddle 类工具助力在线测试和协作代码

2018-08-24
阅读 4 分钟
3.5k
我在《JavaScript 全栈工程师养成记》中基于 JavaScript 介绍了较为完整的软件开发知识,却没有提及日常使用的各种工具。我使用的工具集中大部分都会与编程相关,今天跟大家分享一些用于分享代码的在线工具。因为这些工具的名称好多都包含“Fiddle”,所以统称为 Fiddle 类工具。

JavaScript 私有成员

2018-08-13
阅读 4 分钟
3.2k
Class field declarations for JavaScript(JavaScript 类的字段声明)目前已经进入了 stage-3,其中包含一项 OOP 开发者都很关注的内容:Private fields。JavaScript 一直没有私有成员并不是没有原因,所以这一提议给 JavaScript 带来了新的挑战。但同时,JavaScript 在 ES2015 发布的时候已经在考虑私有化的问题了,所...

异步编程需要“意识”

2018-02-23
阅读 4 分钟
9.5k
虽然我们生活在一个异步的世界里,但对于多数编程初学者来说,异步还是很陌生。学习一门编程语言,通常都是从同步流程开始的,即顺序、分支和循环。而异步流程是什么呢——开始一个异步调用,然后……就没有然后了。异步程序跑哪去了?

Token 认证的来龙去脉

2018-01-26
阅读 4 分钟
44k
不久前,我在在前后端分离实践中提到了基于 Token 的认证,现在我们稍稍深入一些。 通常情况下,我们在讨论某个技术的时候,都是从问题开始。那么第一个问题: 为什么要用 Token? 而要回答这个问题很简单——因为它能解决问题! 可以解决哪些问题呢? Token 完全由应用管理,所以它可以避开同源策略 Token 可以避免 CSRF ...

前后端分离实践

2018-01-08
阅读 6 分钟
18.1k
前后端分离并不是什么新鲜事,到处都是前后端分离的实践。然而一些历史项目在从一体化 Web 设计转向前后端分离的架构时,仍然不可避免的会遇到各种各样的问题。由于层出不穷的问题,甚至会有团队质疑,一体化好好的,为什么要前后端分离?

前后分离模型之封装 Api 调用

2017-11-16
阅读 6 分钟
15.9k
调用 API 访问数据采用的 Ajax 方式,这是一个异步过程,异步过程最基本的处理方式是事件或回调,其实这两种处理方式实现原理差不多,都需要在调用异步过程的时候传入一个在异步过程结束的时候调用的接口。比如 jQuery Ajax 的 success 就是典型的回调参数。不过使用 jQuery 处理异步推荐使用 Promise 处理方式。

使用递归遍历并转换树形数据(以 TypeScript 为例)

2017-11-02
阅读 6 分钟
18.3k
更新记录2020-12-28 更新jsfiddle 不能访问,换用 CodePen最后一段代码中添加显式声明 IDomNode 类型更换为高清插图

从不用 try-catch 实现的 async/await 语法说错误处理

2017-10-31
阅读 5 分钟
28.7k
前不久看到 Dima Grossman 写的 How to write async await without try-catch blocks in Javascript。看到标题的时候,我感到非常好奇。我知道虽然在异步程序中可以不使用 try-catch 配合 async/await 来处理错误,但是处理方式并不能与 async/await 配合得很好,所以很想知道到底有什么办法会比 try-catch 更好用。

从小小题目逐步走进 JavaScript 异步调用

2017-10-25
阅读 2 分钟
10.6k
问题 原题来自 @若泽 的提问。 可修改下面的 aa() 函数,目的是在一秒后用 console.log() 输出 want-value {代码...} 但是,有额外要求: aa() 函数可以随意修改,但是不能有 console.log() 执行 console.log() 语句里不能有 setTimeout 包裹 解答 也许这是个面试题,管它呢。问题的主要目的是考察对异步调用执行结果的...

ASP.NET Core 2.0 下进行插件化开发

2017-09-09
阅读 9 分钟
15.8k
.NET Core 和 ASP.NET Core 都不是新鲜事,但版本 2 绝对是新鲜事。按微软及其它一些软件公司的习惯,通常都是第 2 个版本才趋于稳定(比如 WinMe 后的 WinXP,Office 2007 后的 2010,还有 Sun 的 Java 2 等)。以前对 .NET Core 1.x 和 ASP.NET Core 1.x 一直是学习、了解和观望的态度,随着 2.0 的发布,是时候将态度变...

从 JavaScript 到 TypeScript - 接口

2017-09-02
阅读 5 分钟
7.7k
由于泛型语法总是附加在类或函数语法中,所以从 TypeScript 转译成 JavaScript 之后,至少还存在类和函数(只是去掉了泛型定义,类似 Java 泛型的类型擦除)。然而,如果在某个 .ts 文件中只定义了接口,转译后的 .js 文件将是一个空文件——接口被完全“擦除”了。

从 JavaScript 到 TypeScript - 泛型

2017-08-21
阅读 6 分钟
31.4k
TypeScript 为 JavaScriopt 带来了强类型特性,这就意味着限制了类型的自由度。同一段程序,为了适应不同的类型,就可能需要写不同的处理函数——而且这些处理函数中所有逻辑完全相同,唯一不同的就是类型——这严重违反抽象和复用代码的原则。

ASP.NET MVC 插件化开发简化方案

2017-08-16
阅读 7 分钟
16.3k
Web 管理系统可以庞大到不可想像的地方,如果想就在一个 Asp.Net MVC 项目中完成开发,这个工程将会变得非常庞大,协作起来也会比较困难。为了解决这个问题,Asp.Net MVC 引入了 Areas 的概念,将模块划分到 Area 中去——然而 Area 仍然是主项目的一部分,多人协作的时候仍然很容易造成 .csproj 项目文件的冲突。

C# 的“友元”类实现 Builder 模式

2017-06-30
阅读 5 分钟
9.7k
友元是 C++ 中的概念,包含友元函数和友元类。被某个类声明为友元的函数或类可以访问这个类的私有成员。友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。因此,除了 C++ 外很难再看到友元语法特性。

从 JavaScript 到 TypeScript - 声明类型

2017-06-04
阅读 4 分钟
14.4k
从 JavaScript 语法改写为 TypeScript 语法,有两个关键点,一点是类成员变量(Field)需要声明,另一点是要为各种东西(变量、参数、函数/方法等)声明类型。而这两个点直接引出了两个关键性的问题,有哪些类型?怎样声明?

ES6 / TypeScript / Babel / C# 中的 super(base)

2017-05-23
阅读 3 分钟
6.9k
是的,我加入了 C# 和 Java 的运行结果,毕竟它们是真正的 OOP 语言。另外请注意到,我在 TypeScript 后面加了个问号 (?),因为实际上 TypeScript 虽然编译成了对应的 JS,但是转译过程中是会报错的: