前言前面文章中通过客户端工具(MongoDB Shell、Robo 3T)连接 MongoDB 服务时,只要有 IP 地址和端口号,就能连接到数据库,之后就能操作数据库。这是因为默认安装的 MongoDB 没有启用身份验证,也没有设置初始用户名和密码。然而这会导致很多数据安全问题。MongoDB 提供了多种方式来提高数据库的安全性,例如身份验证、访问控制、加密等。本文主要介绍 MongoDB 提供
配置 TypeORM 连接到数据库时,有一个 synchronize 选项,意思是“同步”,也就是同步 TypeORM 实体和数据表,再详细讲就是根据实体自动创建和修改数据表结构,使其与 TypeORM 定义的实体类相匹配。以 Nest 中的使用为例:import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@n
HTTPS是一种基于SSL/TLS协议的加密传输协议,它采用了对称加密和非对称加密技术来保证通信安全。在HTTPS通信中,对称加密和非对称加密各有不同的作用。对称加密对称加密是指加密和解密所使用的密钥是相同的加密方式。在对称加密算法中,只有持有密钥的人才能够解密被加密的信息。对称加密的优点是加密解密速度快,适用于大量数据的加密传输。但是,对称加密的缺点是密钥的传输存在安全隐患,如果密钥被泄漏,那么
从一个现象入手Axios 和 Lodash 是前端开发中常用的工具。在一个 TS 项目中导入并使用 axios 时,既不会报错,还会有语法提示,感觉很不错。但是导入 lodash 时,就会得到一个红线的波浪线提示:无法找到模块”lodash“的声明文件。当然,编辑器也给出了解决方案:尝试使用 npm i --save-dev @types/lodash (如果存在),或者添加一个包含 decla
模块化对编程语言的重要不言而喻。但是早期的 TypeScript 并没有模块化规范。为了实现代码的封装,像 Java,C#等语言一样,TypeScript 采用了命名空间。命名空间声明命名空间使用 namespace 关键字表示,然后在后面的大括号中去定义各种值包括变量,函数,类,接口等,比如:namespace Util { const _private = '私有属性' expo
JS 的数据类型检测是一道经典的八股文面试题。相信大家都能条件反射的回答出 4 种方法:typeof、constructor、instanceof 和 Object.prototype.toString,并且对它们各自的优缺点也是张口就来。本文对这些方法做了简单归纳,同时又补充了其他 5 种和数据类型检测有关的方法,供诸君食用。typeof:检测基础数据类型和函数很好用typeof 应该是我学习到
变量声明Go 中使用 var 或者 const 关键字声明变量:var <变量名> [变量类型]变量赋值的格式是:<变量名> = <值, 表达式, 函数等>声明和赋值通常会合起来写:var <变量名> [变量类型] = <值, 表达式, 函数等>比如声明一个 string 类型的 name 变量:var name string = "go
前言虽然 JS/TS 支持面向对象编程,但大部分时候还是在写函数。函数是一等公民。本文介绍下如何在 TypeScript 中使用函数,包括:函数类型声明函数参数类型:可选参数、默认参数、剩余参数函数返回值类型this 类型函数重载函数类型面试中经常会被问到,JS 中有哪几种数据类型。其中就会有函数类型。JS 中的函数类型很模糊,准确来说,仅有类型的概念,却无类型的实质。好在有了 TS 强类型的加持
今天学习的内容是 Typescript 几个容易混淆的类型,分别是 any 类型和 unknow 类型,以及 void、undefined 和 never 类型。any 和 unknownany 类型any 就是任意类型。写代码时如果不确定属于什么类型,就可以将其定义为 any 类型。any 类型属于动态类型,它支持和兼容所有的类型。let anyValue:any; anyValue = 10
Vi 和 VimVi 是 Linux 操作系统默认的文本编辑器。Vim 是 Vi 的加强版。不仅可以做简单的文字编辑,它也有颜色高亮,语法提示等特性,可以用作编程。现在大部分的 Linux 发行版都同时包含 Vi 和 Vim。在 Linux 操作系统中,Vim 是必须掌握的一个工具:作为命令行模式下的文本编辑器非常好用大部分 Linux 软件都支持 Vim 的接口,使用 Vim 编辑配置时会有良好
SSH 协议实现免密登录前言拿到一台新的云服务器,肯定会特别想把玩它。想把玩它,那肯定得先登录它,进入到它的内部,一睹它的风采。现在的云服务器厂商都提供了在线登录系统的功能:该说不说,在线终端这一块来说,阿里云做的是真的不赖,有多种模式,甚至不用登录,可以直接发送命令到服务器去执行:这个终端的颜值不错,使用体验也不错,非常流畅:但是通常情况下,我们都是在本地通过一个支持 SSH 协议的终端工具,远
日志日志用来记录程序的运行信息。开发服务端程序,必须集成日志管理的功能,一旦系统出现故障可以及时排查问题所在。日志一般分为:访问日志:记录系统的访问记录。运行日志:输出系统运行时的一些信息错误日志:记录系统出错的状态一般我们都是通过 nginx 做负载均衡,它具备了记录访问日志的功能。所以访问日志交给 Nginx 去做就好。在后端程序开发中,我们只需要关注运行日志和错误日志。Koa-loggerK
前言在 Linux 系统上安装软件有两种常用的方式。一种是通过包管理工具,直接安装;另一种是先下载源码,然后再手动编译,再安装。本文以 Git 为例,演示这两种安装软件的方式。使用 yum 安装Yum 是 CentOS 的包管理工具。使用前先更新下 Yum 源:yum update使用包管理器安装软件非常简单,直接一个命令就能进行安装:yum install git安装完成后看下版本信息:$ gi
前言本文将从零至一,介绍如何在云服务器上通过 Docker 容器运行一个简单的Node应用。本文假设读者已经掌握基本的Linux,Docker,Node,Express 知识。基本步骤本地写好nodejs应用,放到github。云服务器安装docker,配置国内镜像加速。拉取一个node镜像。从github拉取项目代码。编写Dockerfile文件,构建镜像。根据镜像运行一个容器。本地进行访问。具
前言上文介绍了如何理解依赖注入和控制反转,简单来说,控制反转是一种设计模式,可以将类与类的关系解耦,将人工维护转移给一个容器维护。要实现控制反转,依赖注入是一个常用方案,将依赖注册到 DI 容器中,哪里用到,就让容器将实例注入到哪里。Nest 中的依赖注入,主要就是围绕提供者(Provider)展开。所谓的依赖,指的就是提供者类。本文通过一个简单示例,来演示 Nest 中的依赖注入是如何工作的(不
前言Nest.js 是一个使用 TypeScript 实现的在 Node.js 环境中运行的 Web 服务开发框架。它借鉴了很多优秀的设计思想,本文来说一说 Nest 中的依赖注入和控制反转。依赖注入依赖注入,英文名是 Dependency Injection,简称 DI。什么是依赖注入?可以分开来看,就是“依赖”和“注入”。您可能想了,你这是在玩组词造句吗?也是,也不是。有时候将一个概念名词进行
前言上篇文章《Nest 核心概念:模块》中,我们介绍了 Nest 的模块,它是组织 Nest 应用的基本结构。Nest 应用接收请求,交给控制器处理请求,控制器中又调用服务,完成具体的业务逻辑,最后将结果响应给客户端。本文会详细介绍控制器的用法,其实就是通过各类装饰器处理不同的请求和传参。控制器控制器负责处理传入的请求,并向客户端返回响应。所发挥的作用就类似于 Express 或者 Koa 中的路
前言上篇文章《NestJS 扫盲篇:TypeScript 类和装饰器》中,我们介绍了 TS 中类和装饰器的用法。Nest 应用基于面向对象和面向切面开发,大量应用了类和装饰器。所以掌握这两个语法,再去学习 Nest,是一个很有必要的基础。MVC 分层架构在本系列更文的第一篇,较为细致的分析了 Hello World 的示例代码。它只有一个根模块,也就是 App 模块,然后使用控制器接收请求,再调用
前言先回顾下前文中介绍了哪些内容:使用 @nestjs/cli 创建和管理 Nest 应用Hello, World 示例代码分析Nest 基本概念:模块,控制器,服务常用的装饰器:@Module、@Controller、@Get、@InjectableNest 目录结构分析@nest/cli 脚手架的命令本文先不继续讲解 Nest 中的内容,而是打算介绍 TypeScript 中的两个语法:类和装
在正式使用 NestJS 进行开发之前,先来了解下 Nest 应用的目录结构,和一些常用的脚本命令。工程目录下面是使用 @nest/cli 创建的 Nest 项目的目录结构。上篇文章中介绍了 src 目录以及目录下各个文件的作用。下面是对其他目录和文件的说明:目录/文件说明test 目录存放测试文件.eslintrc.jsESLint 的配置文件.gitignore用来配置不需要被 Git 追踪的
初识 NestJS先来看下官网对 NestJS 的介绍。Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。在底层,N
Go 环境安装打开官网,下载对应操作系统的安装包,打开安装包进行安装。使用安装包无需过多的配置,除了安装位置根据自己的习惯更改一下之外,其他的就一直选择下一步进行安装即可。安装完成之后,打开一个新的命令行窗口,输入 go version:可以正确打印出 Go 的版本信息,说明 Go 的环境已经安装成功了。环境变量的设置现在很多语言的 SDK 在安装时都都会自动配置环境变量,主要是将一些命令放到环境
PassportPassport 是在 Node 的 Web 框架中使用的身份验证库。起初它专为 Express 设计,经过扩展之后,它可以在 Koa,Egg,Nest 等主流框架中使用。Passport 的设计类似于 Koa。Koa 只提供了核心的中间件机制和 HTTP 服务的创建,要处理请求,开发者需要自己导入第三方中间件模块,和自己手写处理请求的路由中间件。Passport 本身只提供验证机
学英语时有一个基础的语法叫做谓语动词,谓语动词指的是在句子中可以单独作谓语的动词,比如 sing,dance,rap,is 等等。TypeScript 中有一种特殊的语法叫做类型谓词(Type Predicate),它可以帮助 TS 编译器在运行时确定变量的类型。通常是在函数中,使用谓词将不符合特定类型的值过滤掉,并将其转换为指定类型,从而避免手动类型转换的繁琐过程。通常 TS 的类型检查都是在编
TypeScript 提供了一些基本的类型工具,可以帮助我们进行类型编程。本文主要介绍 TypeScript 中 8 种常用的类型工具,包括 Partial、Pick、Record、Omit、Exclude、Required、Readonly 和 ReturnType。PartialPartial 工具类型可以将一个对象的所有属性变为可选属性。例如,我们有一个 Person 接口定义如下:inte
前言前文《ES6 拾遗:理解 Reflect 反射对象 》介绍了 ES 标准的 Reflect 反射对象,它提供了13个处理对象的静态方法,可以认为 Reflect 对象就是用来专门操作对象的。本文继续介绍另一个和反射有关的概念——反射元数据。Metadata 元数据元数据在开发中是一个很常见的概念,意思是描述数据的数据(Data that describes other data)。比如拍了一张
Reflect 是 ECMAScript6 标准中的一个对象,名为“反射”。它用来代替原来 Object 对象身上的一些方法,比如用 Reflect.defineProperty 代替 Object.defineProperty 等等。之所以要推出 Reflect 对象,是为了对原来一些混乱的 API 做一个更好的分类。比如上面提到的 Object.defineProperty 方法,它可以对一个
MySQL 索引是一种优化数据库查询的重要方式,它可以加速 SQL 查询的速度,并提高数据库的性能。本文将介绍 MySQL 索引的作用以及如何创建索引。索引的作用索引其实是存储在本地的一种数据结构,它能够快速定位到包含特定值的数据行。在 MySQL 中,索引主要有以下两个作用:提高查询速度:当数据库中的数据量非常大时,查询可能需要消耗大量的时间。使用索引可以加速查询的速度,提高查询效率。保证数据的
SQL 注入是一种常见的攻击方式。攻击者通过构造恶意的 SQL 语句,来获取或者破坏数据。开发时通常会使用 ORM(Object-Relational Mapping) 工具来操作数据库,同时还可以有效地防止 SQL 注入攻击。本文将以 TypeORM 为例进行介绍。SQL 注入先来看一个简单的 SQL 示例。假设有一个用户登录的 SQL 查询语句如下:SELECT * FROM users WH
在 JavaScript 中,数组的长度是由其内部属性 length 决定的。当创建一个数组时,数组的长度也就是 length 属性被初始化为 0。当我们向数组中添加元素时,JS 会自动为数组更新长度,也就是将 length 属性设置为新元素的索引值加 1。比如,在下面的代码中,将元素 5 添加到索引 4 的位置时,JS 会自动将数组 arr 的长度更新为 5。const arr = [1, 2,
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号