Transaction是Sequelize中用于实现事务功能的子类,通过调用Sequelize.transaction()方法可以创建一个该类的实例。在Sequelize中,支持自动提交/回滚,也可以支持用户手动提交/回滚。1. 事务的使用Sequelize有两种使用事务的方式:基于Promise结果链的自动提交/回滚另一种是不自动提交和回滚,而由用户控制事务 1.1 受管理的事务(auto-callback)受管理的事务会自动提交或回滚,你可以向sequelize.transaction方法传递一个回调函数来启动一个事务。需要注意,在这种方式下传递给回调函数的transaction会返回一个
飞翔的鱼丸 2019-07-17 Node.js 2788
一般不要使用保留关键字。如果使用了保留关键字,将关键字前后加" ` " 可以解决问题。 MySQL允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。下面列出了一些例子: ACTION,BIT,DATE,ENUM,NO,TEXT,TIME,TIMESTAMP MySQL保留关键字如下: ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB
飞翔的鱼丸 2019-07-17 MySQL 1023
一,空格与格式 缩进 采用2个空格缩进,而不是tab缩进。 空格在编辑器中与字符是等宽的,而tab可能因编辑器的设置不同。2个空格会让代码看起来更紧凑、明快。 变量声明 永远用var声明变量,不加var时会将其变成全局变量,这样可能会意外污染上下文,或是被意外污染。 在ECMAScript 5的strict模式下,未声明的变量将会直接抛出ReferenceError异常。 需要说明的是,每行声明都应该带上var,而不是只有一个var,示例代码如下: var assert = require('assert'); var fork = require('child_proce
飞翔的鱼丸 2019-07-17 Node.js 1294
安装 npm install --save-dev morgan 使用 var express = require('express'); var app = express(); // 设置日志 var fs = require("fs"); var path = require('path'); var morgan = require('morgan'); // create a write stream (in append mode) var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.
飞翔的鱼丸 2019-07-02 Node.js 1356
DOM由来 因为Internet Explorer4和Netscape Navigation4分别支持不同的DHTML(动态HTML),为了统一标准,负责制定web通信标准的W3C(World Wide Web Consortium,万维网联盟)开始制定DOM. DOM0 Netscape Navigator 4和IE4分别发布于1997年的6月和10月发布的DHTML,他们是未形成标准的试验性质的初级阶段的DOM,称为dom0,并不是标准。 DOM1 DOM1是W3C在1998年制定的标准,DOM1级主要定义了HTML和XML文档的底层结构。在DOM1中,DOM由两个模块组成:
飞翔的鱼丸 2019-06-27 JavaScript 1399
安装使用 progress-stream 即可 var fs = require('fs'); var express = require('express'); var multer = require('multer'); var progressStream = require('progress-stream'); var app = express(); var upload = multer({ dest: 'upload/' }); app.post('/upload', function (req, res, next) { // 创建progre
飞翔的鱼丸 2019-06-25 Node.js 2593
File System(文件系统)NodeJS 通过 fs 内置模块提供对文件的操作。fs 模块提供的 API 基本上可以分为以下三类:1,文件属性读写。其中常用的有 fs.stat、fs.chmod、fs.chown 等等。2,文件内容读写。其中常用的有 fs.readFile、fs.readdir、fs.writeFile、fs.mkdir 等等。3,底层文件操作。其中常用的有 fs.open、fs.read、fs.write、fs.close 等等。接口的三种风格:异步、同步和期约Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.
飞翔的鱼丸 2019-06-19 Node.js 1150
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。在引入 TypedArray 之前,JavaScript 语言没有用于读取或操作二进制数据流的机制。 Buffer 类是作为 Node.js API 的一部分引入的,用于在 TCP 流、文件系统操作、以及其他上下文中与八位字节流进行交互。现在可以使用 TypedArray, Buffer 类以更优化和更适合 Node.js 的方式实现了 Uint8Array API。Buff
飞翔的鱼丸 2019-06-19 Node.js 1274
1. 数组是计算机编程世界里最常见的数据结构。任何一种编程语言都包含数组,只是形式上 略有不同罢了。JavaScript数组的标准定义是:一个存储元素的线性集合(collection),元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数。然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中的属性名必须是字符串。2. 创建数组最简单的方式是通过 [] 操作符声明一个数组变量:var numbers = [];var numbers = new
飞翔的鱼丸 2019-06-19 JavaScript 1226
为什么需要链表数组不总是组织数据的最佳数据结构,在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难。在数组中,添加和删除元素也很麻烦,因为需要将数组中的其他元素向前或向后平移,以反映数组刚刚进行了 添加或删除操作。然而,JavaScript 的数组并不存在上述问题,因为使用 split() 方法不需要再访问数组中的其他元素了。JavaScript 中数组的主要问题是,它们被实现成了对象,与其他语言(比如 C++ 和 Java) 的数组相比,效率很低,如果你发现数组在实际使用时很慢,就可以考虑使用链表来替代它。除了对数据的随机访问,链表几乎可以用在任何可
飞翔的鱼丸 2019-06-18 开发技巧 1102
1. JavaScript 正则表达式API 共有 6 个,字符串实例 4 个,正则实例 2 个:String#search String#split String#match String#replace RegExp#test RegExp#exec 字符串对象正则方法 字符串对象共有 4 个方法,可以使用正则表达式:match()、replace()、search()和split()。 ES6 将这 4 个方法,在语言内部全部调用RegExp的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp对象上。String.prototype.match 调用 RegExp
飞翔的鱼丸 2019-06-12 开发技巧 1474
数据采集时,有时候需要延时操作,实现类似sleep()这样的函数: function sleep(ms) { return new Promise((resolve) = { setTimeout(() = { resolve('sleep for ' + ms + ' ms'); }, ms); }); } async function main() { await sleep(1500); ... }
飞翔的鱼丸 2019-06-04 Node.js 1668
替换和分组:替换使用 | 字符来允许在两个或多个替换选项之间进行选择。/^Chapter|Section [1-9][0-9]{0,1}$/上面的正则表达式要么匹配行首的单词 Chapter,要么匹配行尾的单词 Section 及跟在其后的任何数字。如果输入字符串是 Chapter 22,那么上面的表达式只匹配单词 Chapter。如果输入字符串是 Section 22,那么该表达式匹配 Section 22。可以使用括号来限制替换的范围,即,确保它只应用于两个单词 Chapter 和 Section。/^(Chapter|Section) [1-9][0-9]{0,1}$/尽管这些表达式正常
飞翔的鱼丸 2019-06-04 开发技巧 1375
一,什么是单元测试单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 二,为什么要进行单元测试先说为什么浏览器可以直接访问,但为什么还要单元测试?第一浏览器访问其实是手工操作,简单的页面当然访问一下就好了,可是如果你要测的功能很复杂咋办?你要是忘了
飞翔的鱼丸 2019-05-26 Node.js 1295
有一个表有十万条数据,SELECT COUNT(*) FROM t_tablename; 时间长达10秒以上。 解决办法,把 Primary Key 加上 Unique 约束了,速度变成30毫秒了,解决了。 不太清楚原因,先记着。 参考:https://blog.csdn.net/landstream/article/details/79673176
飞翔的鱼丸 2019-05-17 MySQL 1378
重写了爬虫,程序逻辑如下: 1,爬虫抓取文章列表第一页。 2,获取文章列表。 3,遍历文章。 4,把文章列表中文章的缩略图下载保存。 5,把文章内容中的图片全部下载保存,并用图片新路径,替换文章内容中的图片地址。 6,保存文章内容到数据库。 7,处理完文章列表后,递归执行下一页文章列表。 var http = require('http'); var http = require('https'); var fs = require('fs'); var cheerio = require('cheerio'); var pool = require('./mys
飞翔的鱼丸 2019-05-03 Node.js 1291
https://github.com/skaterdav85/validatorjs 这个貌似是github上星数,最高的验证器了。 果然没有让我失望,很类似Laravel和ThinkPHP中的数据验证器。唯一的缺陷,是没有场景这种功能。 let Validator = require('validatorjs'); let data = { name: '', myemail: 'johndoe@sss.ss', age: 12 }; let rules = { name: 'required', myemail: 'required|
飞翔的鱼丸 2019-04-25 Node.js 1402
安装 npm install i18n --save i18n.js var i18n = require('i18n'); i18n.configure({   locales: ['en-US', 'zh-CN'],  // setup some locales - other locales default to en_US silently   // defaultLocale: 'zh-CN',   defaultLocale: 'en-US',   directory: __dirname + '/locales',     updateFiles: fal
飞翔的鱼丸 2019-04-25 Node.js 3040
一、URL 设计1.1 动词 + 宾语RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。比如,GET /articles这个命令,GET是动词,/articles是宾语。动词通常就是五种 HTTP 方法,对应 CRUD 操作。GET:读取(Read) POST:新建(Create) PUT:更新(Update) PATCH:更新(Update),通常是部分更新 DELETE:删除(Delete) 根据 HTTP 规范,动词一律大写。1.2 动词的覆盖有些客户端只能使用GET和POST这两种方法。服务器必须接受POST模拟其他三个方法(PUT、PAT
飞翔的鱼丸 2019-04-24 开发技巧 1528
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id,写入用户的 Cookie。4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。这种模式的问题在于,扩展性(scaling)不好。单机当然没有问题
飞翔的鱼丸 2019-04-24 开发技巧 1257
随机推荐
WordPress RESTful API 的授权方式
WordPress 侧边栏小工具
JavaScript 修改 CSS 样式
JavaScript 事件处理程序
WordPress关闭自动草稿
WordPress 数据库表结构
WordPress 插件路径相关
Flame 插件