Typescript学习笔记(13) - 装饰器(Decorator)
Typescript拓展 - 装饰器(Decorator)
官方文档
装饰器介绍以及基本使用
装饰器:就是一个方法,可以注入到类、方法、属性参数上来扩展类、属性、方法、参数的功能。
常见的装饰器有:类装饰器、属性装饰器、方法装饰器、参数装饰器
装饰器的写法:普通装饰器(无法传参) 、 装饰器工厂(可传参)
装饰器是过去几年中js最大的成就之一,已是Es7的标准特性之一
1. 类装饰器(无法参数)
类装饰器在类声明之前被声明(紧靠着类声明)。类装饰器应用于类构造函数,可以用来监视,修改或替换类定义。 传入一个参数
// 定义一个函数(装饰器)function fun( target:any ){ // 相当于给Person这个类的原型上添加一个userName属性且值为:lam target.prototype.userName = 'lam';}/* 在类的外层使用@关键字套上上面定义的函数组装成装饰器(理解为人在外面穿衣服) 装饰器会自动将该类传入个装饰器函数并由target形参接收*/ @funclass Pers ...
nodejs学习笔记(33) - nest学习笔记(4) :编程思想以及环境变量的配置
AOP(面向切面编程)
所谓面向切面编程,就是对OOP(面向对象编程)的一种补充,我们都知道,在面向对象编程的思想中,我们某一个类却笑功能直接在对应的类中添加即可,但是如果其他类中同样缺少这些功能呢?拿到我们又要复制粘贴到另一个类中去吗? 这里就引出了OOP,在一个项目中类似错误处理,权限校验这些功能一般是集中处理的,在不影响其他业务模块(类)功能的情况下,这里的切面我们可以认为是同等与每一个类(业务功能模块)中的位置,我们在拓展对应的功能时,无需在给模块中修改,直接插入即可,一句话就是: AOP能在不破坏封装功能的前提下,额外新增其他功能。而Nestjs中内置提供了许多AOP功能模块,类似于中间件,管道,错误处理,守卫拦截器等..
IOC(控制反转)以及DI(依赖注入)
IOC是一种思想,一种设计模式,用于降低代码之间的耦合度,基本思想是借助第三方来实现具有依赖关系的对象之间的解耦; DI是IOC的一种具体实现,它允许字类外创建依赖对象,并通过不同的方式将这些对象提供给类
下面进行代码演示:// 1. 创建一个类class IPhone { playGame(name ...
nodejs学习笔记(32) - nest学习笔记(3) :依赖注入以及中间件
依赖注入
官方文档
依赖注入是一种设计模式,它可以帮助我们更好地管理这些对象之间的依赖关系。在 NestJS 中,我们可以使用依赖注入来自动创建和管理这些对象。我们只需要告诉 NestJS 我们需要哪些对象,它就会自动创建它们并将它们传递给需要它们的对象。通俗点讲,例如类,我们无需自己手动的去实例化某一个类,我们只需要告诉module层我们需要用到哪一个类即可(在module层中使用provider对外提供),随后在controller的构造函数中使用装饰符@Inject注入即可使用
源代码如下
下面使用了三种依赖注入的例子,包括函数,变量以及类
// module层import { Module } from '@nestjs/common';import { BoysController } from './boys.controller';import { BoysService } from './boys.service';import { ...
nodejs学习笔记(31) - nest.js框架学习(2):连接以及操作数据库
ORM初识
ORM 是 Object Relational Mapping 的缩写,译为“对象关系映射”,它解决了对象和关系型数据库之间的数据交互问题。使用面向对象编程时,数据很多时候都存储在对象里面,具体来说是存储在对象的各个属性(也称成员变量)中。例如有一个 User 类,它的 id、username、password、email 属性都可以用来记录用户信息。当我们需要把对象中的数据存储到数据库时,按照传统思路,就得手动编写 SQL 语句,将对象的属性值提取到 SQL 语句中,然后再调用相关方法执行 SQL 语句。
而有了 ORM 技术以后,只要提前配置好对象和数据库之间的映射关系,ORM 就可以自动生成 SQL 语句,并将对象中的数据自动存储到数据库中,整个过程不需要人工干预。在 Java 中,ORM 一般使用 XML 或者注解来配置对象和数据库之间的映射关系。而nestjs官方推荐使用的orm工具为typeOrm
传统的sql语句
SELECT id,name,age FROM girls where id=1// 代码res = db.execSql(sql)name ...
nodejs学习笔记(30) - nest.js框架学习(1):基本认识以及编写路由和接口
Nest.js简介
中文官方文档 英文官方文档
Nest (NestJS) 是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它使用渐进式 JavaScript,构建并完全支持TypeScript(但仍然允许开发人员使用纯 JavaScript 进行编码)并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式响应式编程)的元素。
使用nestjs的开发体验就像是搭积木一样,每一块业务逻辑基本都是有模块(module)来控制,包括其对应下的接口等,这样使得每一块业务都非常的清晰.
快速上手(安装和新建项目)
安装
npm i -g @nestjs/cli
新建项目
nest new project-name
项目文件解析+-- dist[目录] // 编译后的目录,用于预览项目+-- node_modules[目录] // 项目使用的包目录,开发使用和上线使用的都在里边+-- src[目录] // 源文件/代码,程序员主 ...
实习了一段时间中常用的方法记录(2)
这篇博客记录实习的所见所闻28.在react native中使用context和使用DeviceEventEmitter的区别
React Native 中的 Context 和 DeviceEventEmitter 都是用于在组件之间共享数据和通信的工具,但它们的使用场景和特点略有不同。
Context 是 React 的核心特性之一,它可以让我们在组件树中传递数据而无需手动逐级传递。通过创建一个 Context 对象,并使用 Provider 组件将值传递给子组件,我们可以轻松地实现跨组件传递数据。在 React Native 中,Context 通常用于管理全局状态或主题样式等应用级别的配置信息。以下是一个使用 Context 在 React Native 中共享全局状态的示例代码:
import React, { createContext, useState } from 'react';import { View, Text, Button } from 'react-native';cons ...
实习了一段时间中常用的方法记录(1)
这篇博客记录实习的所见所闻11.react native中的navigation中的headerBackImage属性(设置返回按钮样式)
在React Native Navigation中,headerBackImage是一个可选的属性,headerBackImage 属性最早出现在 @react-navigation/stack 5.0.0 版本中。在此之前,该属性可以通过使用 headerLeft 和自定义返回按钮组件来实现。,用于自定义路由堆栈导航栏中返回按钮的图像。默认情况下,返回按钮会显示操作系统的默认返回箭头图标。
如果你想要使用自己的图标来代替默认返回箭头,可以在创建StackNavigator时为每个StackNavigator或者每个具有独立header的screen设置 headerBackImage 属性。
例如,你可以通过以下方式在整个stack navigator上设置该属性:
import { createStackNavigator } from '@react-navigation/stack';const S ...
node学习笔记(29) - 错误处理以及crypto模块(加密模块)
错误处理(异常处理)
我们都知道,node应用程序是运行在一个单线程,单进程的环境当中的,这也就意味着只要成勋在运行过程中出现一个错误,整个服务器就会崩溃,查看下面的代码:
/* 使用node搭建一个简单的服务器 */const http = require('http') // 引入http模块// 这里我们定义一个接口返回一个丢出一个错误,当我们请求'/data'接口时,服务器就会报错const server = http.createServer((req,res)=>{ if(req.url === '/data'){ throw new Error('丢出一个错误!!!') } res.end('服务器正常运行!')})server.listen(3000,()=>{ console.log('服务器已启动,3000端口正在监听...');})
...
node学习笔记(28) - Node中的非阻塞以及事件循环
Node中的非阻塞以及事件循环什么是非阻塞
我们应该都听过node是单线程的,这句话其实对也不对,因为一个进程往往是包含多个线程的,一个用node搭建的应用运行在一个计算机分配到进程中里面包含有多个线程,其中有且仅有一个线程是用来处理JavaScript脚本代码的,这也就是node是单线程的由来,其他的线程则是用来处理Node多任务的I/O操作,由此可见,我们也可以认为Node是多线程的,那么既然Node只有一个线程去处理js代码,那为什么只有单线程的node又能号称轻松应对高并发的场景的?
要知道,JavaScript本身是一个单线程阻塞的同步语言,js引擎在处理js代码的时候会初始化一个函数调用栈,这个调用栈是唯一的,他的特点是,当调用栈被一个task()占用的时候,他说不能够执行其他脚本的,我们可以看一下下面一段代码:
const a = ()=>{ console.log('我是a');}const b = ()=>{ a()}b() // 我是a/* 首先初始化调用栈 b() ...
react-native学习笔记(2)- 路由的基本使用
React Native中的路由的基本使用!
官方文档
React Native中的路由功能是通过react-navigation这个组件来实现的,与react中的路由(react-router)两者之间是有差异的,因为RN是运行在APP中的,RN当中主要用到的路由有以下四种
stack栈路由 (基本路由)
BottomTab 底部标签路由 (底部导航)
drawer 抽屉路由 (左右划出菜单)
MaterialTopTab 顶部标签路由 (顶部导航)
安装路由,相关依赖以及初始化配置
下载路由
npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view
下载路由回收(普通屏幕和刘海屏)
npm i react-native-screens react-native-safe-area-context
处理手势
np ...