blog
blog copied to clipboard
红日初升,其道大光:sun_with_face::house_with_garden:请star或watch,不要fork
### 纯函数 **纯函数:相同输入永远相同输出且无任何可观察的副作用**。如slice和splice,可以把slice看作是纯函数,而splice不是,因为splice修改原数组,违背了了相同输入不同输出的原则。 纯函数借鉴于**数学中函数的概念**,即一对一,而不是一对多(即相同输入永远相同输出) 纯函数的输出结果**不应该依赖外部的环境**,如: ```javascript // 不纯 const minimum = 21; const checkAge = function(age){ return age >= minimum } // 纯的 const checkAge = function(age) { const minimum...
 柯里化的概念大家应该都清楚,就是将一个接受多个参数的函数转化为接受单一参数的函数的技术。 源代码位于 [https://github.com/llh911001/mostly-adequate-guide-chinese/blob/master/code/part1_exercises/support.js](https://github.com/llh911001/mostly-adequate-guide-chinese/blob/master/code/part1_exercises/support.js) 柯里化函数: ```js function inspect(x) { return (typeof x === 'function') ? inspectFn(x) :inspectArgs(x); } function inspectFn(f) { return (f.name) ? f.name : f.toString(); } function inspectArgs(args)...
### 组件的注册方式 作为一个UI库,肯定是需要全局使用的,因此必然需要使用插件的方式。即 `Vue.use(My-UI)` 。因此全局来说应该是注册为插件的形式。一个插件作为一个对象时需要提供install函数,我们可以在这个函数中对我们所有的 `component` 进行全局注册,这样就不必要在在每次使用组件的时候都 `import` 了,即: ```javascript module.export = { install: function (Vue, opts = {}) { for (const item in components) { if (components[item].name) { Vue.component(components[item].name,...
 ## 创建响应 从控制器的角度,创建HTTP响应有三种方法: - 调用 `render` 方法 - 调用 `redirect_to` 方法 - 调用 `head` 方法,向浏览器发送只含HTTP首部的响应 一个控制器: ```ruby class BooksController < ApplicationController def index @books = Book.all end end ```...
 ## 数据验证概览 #### 为什么要做数据验证 数据验证确保只有有效的数据才能存入数据库,在模型中做验证是最有保障的,只有通过验证的数据才能存入数据库。数据验证和使用的数据库种类无关,终端用户也无法跳过,而且容易测试和维护。 数据验证的方式主要有数据库原生约束、客户端验证和控制器层验证: - 数据库约束无法兼容多种数据库,难以测试和维护,但是如果其他应用也要使用这个数据库,最好能够在数据库层做一些约束。 - 客户端验证可靠性不高,但是和其他验证方式结合可以提供实时反馈 - 控制器层验证不灵便,难以测试和维护,只要可能就应该保证控制器的代码简洁,这样才有利于长远发展 Active Record 对象分为两种,一种在数据库中有对应记录,一种没有,新建对象还不属于数据库,只有调用了 `save` 方法后,才会存入数据库,可以使用 `new_record?` 方法判断是否存入数据库,未存入则返回 `true` ,存入则返回 `false`  新建并保存会执行 `SQL INSERT` 操作,更新记录会执行 `SQL UPDATE`...
 ## 编写迁移 #### 使用 create_table 方法创建数据表 ```ruby create_table :products do |t| t.string :name end ``` `create_table` 是最基础的、最常用的方法,通常由生成器生成,默认情况下,这个方法会自动创建 `id` 字段, 可以使用 `id: false` 来禁用主键,可以使用 `:primary_key` 来修改主键名称,如果需要传递数据库特有的选项,可以在 `:options` 选项中使用SQL代码 ```ruby create_table...
 Active Record 是MVC中的M,负责处理数据和业务逻辑,Active Record实现了Active Record模式,是一种 **对象关系映射** 系统 **Active Record 模式:** 在 **Active Record 模式:** 中,对象中既有持久存储的数据,也有针对数据的操作,Active Record 模式把数据存取逻辑作为对象的一部分,处理对象的用户知道如何读写数据。 **对象关系映射:** ORM是一种技术手段,把应用中的对象和关系型数据库中的数据表连接起来,使用ORM,应用中对象的属性和对象之间的关系可以通过一种简单额方法从数据库中获取,无需直接编写SQL语句,也不过度依赖特定的数据库种类。 Active Record重要的功能有: - 表示模型和其中的数据 - 表示模型之间的关系 - 通过相关联的模型表示继承层次结构 - 持久存入数据之前,验证模型...
 ## 创建rails项目 以blog项目为例: ```shell rails new blog ``` 只需几秒钟就会得到一个基本的rails项目结构:  各个目录的作用为: - **app**:存放web应用的控制器、视图、模型、helpers等,开发主要集中在这里 - *bin**:各种脚本 - **config**:路由、数据库等的配置文件 - **db**:数据库的schema和数据库的迁移文件 - **log**:日志文件 - **package.json**:npm包记录,使用yarn管理 - **public**:静态文件 - **test**:测试 使用 `rails...
 ejs项目大名鼎鼎,应该就不需要介绍了,主要收获就是得知了实现一个模板引擎的流程,ejs是将模板作为字符串逐个解析,遇到正常的html代码,就放进一个数组中去,遇到js代码则进行过滤器、包含等的处理,最后数组join成一个可以成为Function构造函数第二个参数的字符串,构造成构造函数之后就是调用返回最终的html字符串。以下是阅读源码的笔记,因为源码中遗憾有很多说明,所以笔记很少。 ```javascript ejs = (function(){ // CommonJS require() function require(p){ if ('fs' == p) return {}; if ('path' == p) return {}; var path = require.resolve(p) , mod =...
 [cookie-parser](https://github.com/expressjs/cookie-parser)相信使用过Express的人肯定使用过,cookie-parser是一个Express解析cookie的中间件,其中关于signed cookie的疑问可以在 [What are “signed” cookies in connect/expressjs?](https://stackoverflow.com/questions/11897965/what-are-signed-cookies-in-connect-expressjs)这里找到。(等我智商涨一点再来看了)。 req本质是inComingMessage,cookie-parser所做的工作是将cookie从header中转移到req中,并且转化为json对象。 ### 大神片段: ```javascript var secrets = !secret || Array.isArray(secret) ? (secret || []) : [secret] ``` 作用是:**将字符串、空值、数组都转化为数组** ```javascript /*! *...