构建您的第一个Node App:绝对入门指南
盖房子 开发软件:业务分析师在需求分析中的作用
发展您的开发技能:掌握最新资源
使用Napa.js在Node.js中启动并行编程
如何为非程序员阅读JSON
使用ES6类在JavaScript中构建链接列表的入门
2条蛇的故事
2条蛇的故事

让我们漫步在居住在茂密的森林中的2条有毒有力的蛇的旅程中。 即:毒蛇和眼镜蛇 为什么我们需要使用它们? 就个人而言,您可以通过编写自己的代码来完成它们要做的任务,而您不需要它们。 但是为什么要在已经完成的情况下重复。 如果您的用例没有任何开销,请随时使用。 毒蛇 Viper是一款可管理您的应用程序所需的所有配置的工具。 不管是从json / yml文件中读取还是从环境中读取,或者从命令行中读取,它都能完成所有工作。 有关毒蛇的重要事项: 毒蛇使用以下优先顺序。 每个项目优先于其下面的项目: 显式调用Set-5 标志4 env-3 配置2 键/值存储1 默认值-0 默认值: viper.SetDefault("DATABASE_HOST", "localhost") 。 密钥不是必需的默认值,但是如果未通过配置文件,环境变量,远程配置或标志设置密钥,则很有用。 读取配置文件:有两种方法。 使用yaml / json文件并通过设置文件名和路径来使用ReadInConfig()进行读取 使用字节缓冲区,并通过设置文件类型并将字节缓冲区传递给ReadConfig()进行读取。 设置替代: viper.Set("DATABASE_HOST", "localhost")手动设置配置键。 它的最高优先级,如果已设置,则Get调用将返回此值。 环境变量: v = viper.New() 如果调用v.AutomaticEnv()- AutomaticEnv是强大的帮助器,尤其是与SetEnvPrefix结合使用时。 调用时,Viper会在发出viper.Get请求时随时检查环境变量。 它将应用以下规则。 它将检查环境变量,该环境变量的名称与键的大小写匹配,且键设置为大写并带有EnvPrefix(如果已设置)。 例如。 EnvPrefix = viablimp,键= Database_Driver,它将搜索VIABLIMP_DATABASE_DRIVER作为环境变量 v.BindEnv(“ id”,“ viablimp”) v.SetEnvPrefix(“ prefix”) os.Setenv(“ viablimp”,“ […]

Chrome DevTools中的黑匣子
Chrome DevTools中的黑匣子

目前,我正在研究简单的React / Redux应用程序。 我有带有热重载和某些依赖项的Webpack捆绑程序。 此时,此应用程序的调试变得有点难以理解。 我的意思是,几乎在每种情况下,调试此类应用程序时,您都会将堆栈跳转到所用库的源代码中(在我的情况下是React)。 如果您正在使用热模块更换,那么您将了解HMR的逻辑。 那不行 我们不想穿越地狱的这九个圈子。 如果您使用的是Chrome DevTools,那么您会很高兴(如果不使用,则绝对应该尝试)。 有一个很酷的功能,叫做“ Blackboxing” 。 黑盒化为您提供了一种表示库代码的方法,以便调试器可以在其周围进行路由。 当您将源文件加黑名单时,调试程序将不会在逐步调试代码时跳入该文件。 Chrome开发者工具网站上有一篇很酷的关于黑匣子的文章。 右键单击要黑匣子的文件很容易,但是如果我们的脚本在开发服务器上或与Webpack捆绑在一起,我们不建议这样做。 对我来说,解决方案是制作一种文件格式,必须将其黑框显示。 只需按F1打开“设置”,然后选择“黑匣子”标签: 在这里,我们可以通过几种方式定义要添加到黑名单中的脚本: 脚本文件名 包含脚本的文件夹 或定期展开以针对特定脚本 就个人而言,我使用以下模式: \.min\.js$ -适用于所有缩小的源 node_modules和bower_components —用于依赖性 〜— Webpack捆绑包中的依赖项主页 bundle.js —它本身就是一个包(我们使用源地图,不是吗?) \(webpack\)-hot-middleware 这种方式对我来说效果很好,但是如果您有更好的主意,我将不胜感激。 感谢您的阅读!

去还是不去。
去还是不去。

从C和Python程序员的角度来看GoLang。 介绍。 为什么是Python? 当今最流行的语言之一是Python。 并且有充分的理由。 您不需要那么多样板代码。 代码本身可以在语义上理解。 他们中最好的? 每件事都有模块。 随着Python 3.7的发布,Python可以做更多的工作。 它可以用于使用“ aync / await”结构的异步编程-到目前为止,这是Javascript的代名词。 使用Python之类的语言时,唯一的缺点是速度。 众所周知,Python比C ++慢近5倍。 C-编程语言之父。 C是最古老的编程语言之一。 它仍然包含在许多学院(包括我自己的学院)的课程表中。 使用C之类的语言的最好理由是它接近核心。 它提供了可移植性,速度和对编程结构的更多控制。 这就是为什么在操作系统和嵌入式技术方面C的重要性是首屈一指的。 自然,如果您可以掌握C之类的语言,那么您就可以针对任何一种语言进行操作。 C的任何问题已由其后继者(如C ++和Java)很好地分类。 Go在哪里适合所有这一切? 与Python和C之类的语言相比,Go语言仍然很年轻。 它由Google开发,于2009年发布。距今仅10年。 由传奇人物肯·汤普森(Ken Thompson)和罗伯·派克(Rob Pike)共同开发的事实应该说明,谷歌想让一种更适合其需求的语言与C,Python,JavaScript和Java之类的产品竞争。 没错,我喜欢Python,JavaScript和C。但是我喜欢它。 有很多原因。 对我影响最大的是,当我在Go中编写代码时,它使我感到很舒服。 我只需要打印一行就不必写“ System.out.println()”。 我不必担心代码中令人讨厌的“;”或缩进。 感觉就像Python,C和Java之间的交叉。 让我们面对现实吧,正是这样的小事情使生活变得完美。 GoLang或Go。 将Go称为GoLang有一个误解。 前者是该语言的专有名称,后者只是Go +语言的缩写。 使用Go,您必须编写比典型的Python多一些的代码,但不能比C ++或C多得多。使Go如此流行的原因是Go中并发的实现。 其他唯一支持并发的流行编程是Java。 请不要将异步编程与并发混淆。 他们是不同的。 你可以在这里读到它。 并发和并行线程之间也有一些区别,您可以在前面的文章中找到。 我并不是说这篇文章可以成为有关Go中所有内容的全面指南。 我确实打算就如何开始使用Go撰写一系列文章。 但是,本文旨在让您对Go为何如此受欢迎的原因有一个细微的了解。 […]

使NativeScript与众不同的6件事
使NativeScript与众不同的6件事

我从事NativeScript项目已有几个月了。 NativeScript是一个运行时,它允许使用JavaScript,CSS和标记创建本机移动应用程序。 没有网络视图 。 自从NativeScript推出以来,还有其他一些提供类似解决方案的技术进入了市场。 对于开发人员而言,就其优势,劣势以及最重要的方面而言,这使开发人员很难将一种技术与其他技术区分开来,这对他们及其项目都是正确的。 我想写下来使NativeScript独一无二的特定方面,希望它能帮助您作为开发人员做出明智的决定。 请记住,这不是我们在这里玩的零和游戏。 没有一种万能的解决方案,您拥有的选择越多,成功的机会就越大,这最终才是最重要的。 选择是好的。 首先,您需要知道NativeScript是在考虑Angular的情况下设计的 。 全部都是JavaScript。 那是真的。 但是,JavaScript本身不足以构建大型应用程序。 在网络上,我们使用Angular,Ember或React之类的库及其所有朋友(如Redux)来解决此问题。 一年多以前,Google与我们联系,开始与他们合作,将Angular 2纳入NativeScript计划。 在我们首次发布之前,我们就一直在NativeScript中提供Angular 2支持。 我们始终计划建议开发人员在构建NativeScript应用程序时使用Angular 2。 尽管NativeScript提供了自己的绑定版本,但我们知道开发人员不仅需要大量的功能来构建实际的应用程序,而且我们不想为此目的发明另一个JavaScript框架。 Angular 2非常适合使用NativeScript构建移动应用程序。 通过其独特的设计,Angular 2与DOM分离。 它丝毫不关心最终用于呈现应用程序可视部分的内容。 借助NativeScript,应用程序是使用Angular 2构建的,所使用的代码与Web几乎相同。 唯一更改的是模板。 例如,在左侧,您将看到TodoMVC Angular 2实现的一些代码。 在右侧,您将在NativeScript中看到完全相同的代码。 唯一的区别是NativeScript没有本地存储API,但确实有几乎相同的ApplicationSettings API。 我只是将我们的API包装为本地存储,然后该文件将是相同的。 网络左侧的文件没有“ @Injectable()”注释,但我不知道为什么。 这应该。 NativeScript社区的一位开发人员Nathan Walker创建了一个Angular Seed项目,该项目可呈现到Web或本机,并在两面均提供了对i18n的全面支持。 能够跨多个平台共享一个代码库的整个想法实际上已经开始实现。 并不是说这是一个新概念,但至少这次没有涉及Active-X或Applet。 您不必将Angular 2与NativeScript一起使用,但是许多开发人员,特别是那些来自结构化或大型框架背景的开发人员,都将发现Angular 2是他们希望构建其许多技术的基础。 这不仅涉及移动应用程序。 这是关于您的整个堆栈。 其次,NativeScript运行时的最大区别在于, NativeScript提供了对本机API的100%访问 。 我们知道,没有其他基于JavaScript的解决方案可以提供相同的功能。 […]

使用Golang构建JWT身份验证的RESTful API
使用Golang构建JWT身份验证的RESTful API

课程 使用Golang构建JWT身份验证的RESTful API 是最近发行的有关Udemy的课程,在Go编程语言(Golang)类别下越来越受欢迎。 课程中的学生: – 了解 JSON WEB令牌(JWT)背后的理论以及如何构造和使用它们 – 建立 注册处理程序函数,该函数将获取用户的凭证(例如电子邮件和密码)并将其保存在PostgreSQL数据库表中, – 实现一个实用程序,该实用程序使用“ bcrypt ”包生成 密码哈希 ,以避免在数据库中存储纯文本密码 – 构建一个登录处理程序函数,该函数将获取用户凭据并根据其提供的凭据验证用户 – 实现一个令牌生成器实用程序,该实用程序获取用户的凭证,并与开发人员指定的机密和声明一起 ,生成一个J SON网络令牌(JWT), – 创建 一个中间件功能,该功能可根据对受限路由的请求来验证JWT令牌 此外,在整个过程中,您将学习几个Golang和REST API身份验证概念。 除了Golang之外,您还将使用的一些主要技术是: 用于创建数据库实例和用户表的PostgreSQL数据库,您的记录将存储在该表中, “ jwt-go ” 包用于生成JSON Web令牌及其验证, “ gorilla / mux ” 软件包,用于创建将在其上注册端点和处理程序功能的路由器, “ pq ” 包用于解析数据库实例的URL, “ database / sql ” 软件包,用于建立和维护与数据库实例的连接, ‘ bcrypt’软件包,用于生成和比较您的密码哈希, Postman应用程序,用于通过多个HTTP请求测试您的API

JS20min天— 7
JS20min天— 7

这系列主题是JavaScript主要,因此会快速带过HTML相关知识,让大家有个基本的认知,然后我们就要回到JavaScript学习如何控制。 认识HTML 首先我们在做一份文件时,基本上都有一个基本的规格,而HTML的规格很浅简易懂,而我们都称一个一个的“ ”为标签(元素)。 此元素代表的是整个网站。 此元素代表的是网页的头,意思是可以放一些设定,SEO,外部档案等等。 整个网站的内容显示位置,而元素就从这边开始。 认识元件—更多元件的参考网站 元件就是浏览器所预设好的有「样子」,「功能」的东西。 输入 输入元素,常用在填写使用者资料或登录会员时使用 纽扣 按钮元件,本质是一个只有样子但没有任何功能的元件 登录 选择 & 拖放选件,是一个常用的选择性别,年龄,日期或地址时常用的元件,除了使用之外,还要搭配元素 请选择性别 男 女 认识 元素 元素在当前的使用上是一个很重要的范围元素,可以将我们要摆放在网页上的元素一个分开在 中,就可以让元素乖乖的在他们的位置上做正确的事情。 假设我们想做两种不同的表单在一个画面上,又想要让他们在不同的范围中,就可以用 将他们分开。 送出 清除 命名元素 命名元素有两种方法,我自己理解为“命名”的概念,这样刚入门会比较好懂一点,而这东西会牵扯到除了JavaScript以外,还有关于网页中CSS Style的使用。 ID 类(类名) ID 使用这个命名方式在整个网页中就只可以有一个“一个”同名的元素,不可以有其他的相同id元素,这会影响到我们在使用JavaScript取得元素时,会造成非预期的资讯,因为有两个id,选择器会不知道要取得哪一个元素来使用,这个很重要。 你好 世界 / *这个元素id是不可被重复的* / 类 使用这个命名方式的元素可以有重复好几个,并且可以一次赋予好几种的类命名,就好像分类一样。 步骤1 步骤2 / *没问题* / 步骤3 / *没问题* / 当然id跟class是可以放在一起的。 步骤列表 配合JavaScript中会进行的使用类而不是id。 看看其他相关教学 […]

Go中的依赖注入
Go中的依赖注入

八月初的时候,我在COSCUP2017的Golang场分享了主题为Go中的依赖注入( 幻灯片 , 视频 )。在这边整理成文章,后续若有新的见解会持续更新,也希望能够帮助到初级中学的朋友们。 在软体设计领域,大家应该多少有耳闻SOLID设计原则,而这个SOLID的最后一个D跟依赖注入(DI)是息息相关的,所以我们先来了解一下。 这个D代表的是Dependency Inversion Principle(DIP),另一个常常与他形影不离的名词In Control of Control(IoC)相信大家也多少有看过。 到底DIP,IoC,DI这三个名词之间的关系是什么呢?通过一番调查我觉得可以大致使用下面这张图来理解。 DIP(依赖倒置原则):内置低 重建软体系统的建议原则 IoC(控制反转):将DIP应用在系统不同层面的各种具体方法 DI:应用在物件依赖这个外形上的一种IoC DIP vs. IoC可以理解为战术与战略的对应关系,如上图左右两个大圈圈,而DI则是IoC的一个子集合。对这些名词的关系已有大致的理解后,在后续的探讨中中才不至于迷失了方向。 接着,我们看一下维基百科对于DIP的解释,两句很有哲理的绕口令😅。 高级模块不应依赖于低级模块。 两者都应依赖抽象。 (高阶模组对应依赖低阶模组,两者皆依赖抽象) 抽象不应依赖细节。 细节应取决于抽象。 (抽象依赖依赖细节,细节应该依赖抽象) 高阶?低阶?抽象?细节?,当初看完两个句子的我,心中满是黑人问号。经过一番沉淀和归纳,其实这两句话想传达的是很容易的两个概念: 1 。Abstraction (抽象) 2. Inversion(依赖转换) 。而利用这两个概念要怎么设计出一个低转换的系统呢? 在回答这个问题之前,我们要先回答为什么我们需要低耦合,或者换句话说,高替换到底带来什么样的问题? 改变是有风险的 测试很难(难以测试) 语义学很复杂(预测性低,理解不易) 举个简单的例子来感受一下,假设今天我们收到一个加密文件的需求: 从档案读取内容->加密->输出加密结果至档案 ,如下图所示: 一个很直白的实现实现如下,加密器类型有一个Run方法,接收src , dst两个参数,分别代表输入和输出档案的路径: 这时候,一种高度补充的方式就是约会switch条件逻辑(如下图),针对不同的输入和输出类型,执行不同的程序逻辑。 今天和大家分享的是facebookgo / inject这个注入框架,我针对自己的需求改了一个自己的版本browny / inject。下面会以我的版本来介绍DI框架要如何改善上述的问题。 在browny / inject中的inject_test.go有一个简单的inject_test.go ,这个范例要重建的依赖图如下图所示: 如下,我们要构建master对象,但是通过DI框架,现在不需要那些依赖关系的代码了。在一开始,我们先把系统中所需要的对象都先初始化出来。然后,在depMap里面描述这个对象(最后,将这个depMap放进Weave方法,DI框架放到这些物件自动放放到需要他的位置。 […]

回调和承诺|| javascript入门|| S01E04
回调和承诺|| javascript入门|| S01E04

希望再次见到您, 答应我,您到达时会回电 —杰克到罗斯(泰坦尼克号) 好的,您可以笑一秒钟,但是我将尝试说服您我的说法没有错,至少是要建立一个图像并理解回调。 在开始之前,我假设您来自软件同步运行的星球,但是请紧握它的2k18,我们生活在这个世界中,我们相信多任务处理是您的副业,还是抚摸客户以及建立关系。 那么为什么我们的程序应该线性执行工作。 在这种情况下,Nodejs派上用场了,因为它是异步事件驱动的编程语言/环境,但这意味着什么,让我们做一个简单的示例。 现在,以Node.js术语或事件驱动的范式,上面的代码也可以这样编写。 所以刚刚发生了,为什么我们还要关心它。 因此第一段代码称为阻塞代码,另一段称为非阻塞代码。 在实际情况下,软件需要执行许多I / O操作,例如,调用数据库,读取和写入文件或调用API。 如果是串行执行,您的代码段将等待上面的行运行,最终将增加响应时间。 但是如果不是异步执行,则您的程序不会以特定的顺序运行,这在大多数情况下是很方便的。 让我们再举一个现实世界的例子,假设您的妈妈给您一个惊喜,并为您的3个最好的朋友举办了一场派对 ,并让您有责任亲自邀请他们并为派对带来冷饮并尽快回来。 #1在同步行为中,您将去找朋友A,请他为聚会做准备,您将等到他准备好之后 ,再与他一起去第二个朋友B ,以此类推,最后三个会带着冷饮回到家,但您想帮助您安排妈妈吗? 这是一种有效的方法吗? #2在异步行为中,您将去找朋友A ,请他为聚会做准备,并在您的第一个朋友准备就绪时转到第二个朋友,依此类推 , 等等 ,您将告诉每个人一旦他们来就给您讲话。准备好了,您将得到冷饮并帮助您的妈妈安排。 听起来真实吗? 因此,nodejs的异步行为类似于第二种情况,解耦的代码不需要按顺序执行,但是对于耦合代码javascript Promises和Callback的情况,您也不必编写耦合耦合的解耦代码。派上用场。 Callback是javascript事件循环机制中的简单函数,将在某些事件(例如,文件读取,数据库查询完成)上触发 Promise对象表示异步操作的最终完成(或失败)及其结果值。 回调和承诺之间有什么区别吗? 是的,尽管它们都执行相同的行为,但是Callback是一个函数,它作为参数传递给调用函数,其中Promise是一种将值上的操作链接在一起的机制。 足够的理论可以编写我们的回调和承诺。 打回来 – (当谈到JavaScript的性能和核心方面时,PS Promises和Callbacks在javascript社区中是一个很有争议的话题。这只是冰山一角,如果您正在寻找使用javascript的载体,那么您应该对这些概念有一定的了解)

JavaScript中的匿名函数
JavaScript中的匿名函数

JavaScript中的函数是一等公民或一类对象,这意味着我们可以做一些事情,例如将它们作为函数中的参数传递或将其作为执行函数的结果返回。 Yoy可以在这里阅读有关功能的更多信息: JavaScript函数-了解基础知识 探索JavaScript中的函数-声明,表达式,调用等。 codeburst.io 我将用代码解释什么是匿名函数(AF): 因此,AF是一种未保存在变量中或在“功能”标识符后声明名称的功能。 AF的第一个问题是没有名称,一个很愚蠢的声明,但是对于开发人员而言,变量,类或方法的名称是我们掌握的有关该变量,类或方法的责任和行为的主要文档。 坏名会让我们犯很多错误,例如期望函数在实际代码中在控制台中打印出某物时返回某事,然后返回void,例如,如果我们用“ functionResultGetter”之类的名字命名了“ funcionResultPrinter”。 因此,我们不必使用匿名函数的第一刻就是需要一个描述性名称 ,而这种通用性永远都会发生。 第二个问题是在运行时声明AF并将其保存在内存中 。 这意味着每次执行AF都会在内存中占据另一个位置,这可以增强该部分代码所需的计算能力。 让我们用代码做另一个例子: 在该示例中,我们拥有几乎不需要任何计算工作量的AF,但是我们可以对某个函数进行繁重的工作来获取所需的东西,这会消耗服务器或客户端浏览器中的大量资源。 解决方案是将函数命名为: 最后让我们做一些基准测试: 我们有两种情况需要避免使用匿名函数: 当函数需要一个描述性名称时。 当我们需要使用需要大量计算能力的函数时。 我的建议是为每个函数命名,这将帮助您和其他开发人员了解该函数在做什么并可以节省资源。 我叫Felipe Medina,我是一位专门从事Web图形界面的阿根廷软件架构师。 我正在DoSocials工作! 坚信建立跨专业和多学科的网络。 我相信免费的知识,所以我努力去了解它。 我正在等待您的任何问题,我将非常感谢您提出任何批评和评论。 您也可以通过以下方式与我联系: Muramasah(Xavier Felipe Medina) Muramasah有36个可用的存储库。 在GitHub上遵循他们的代码。 github.com