nodejs
文章平均质量分 65
Corner1990
以为自己什么都有,仔细想想什么都没有!
展开
-
SQL学习之函数操作
嗯,函数,函数,函数。。。。字符串函数SQL提供了很多字符串操作方法,下班是一些常见的函数函数名称描述CONCAT字符串连接CONCAT_WS使用指定的分隔符进行字符连接FORMAT数字格式化LOWER转小写字母UPPER转大写字母LEFT返回字符串s开始的最左边n个字符RIGHT返回字符串s开始的最左边n个字符...原创 2019-01-19 16:59:33 · 348 阅读 · 0 评论 -
koa学习三
最后处理ctx和回调的问题,以及服务器error的报错处理koa.js内容// let Koa = require('koa')let Koa = require('./koa/application')// koa 是一个类,有两个方法,一个叫做use 一个叫做listenlet app = new Koa()app.listen(3000)// 第一个中间件中调...原创 2018-08-21 19:39:21 · 285 阅读 · 0 评论 -
koa学习二
之前完成了request的封装,现在封装response对象,并挂载response对象到ctx上applaction.jslet http = require('http')let context = require('./content')let request = require('./request')let response = require('./respo...原创 2018-08-21 19:38:44 · 186 阅读 · 0 评论 -
koa学习一
koa作为学习node来说是一个很不错的框架,简单轻巧易上手,哈哈哈,然后美美的吧异步代码写成同步,明显是居家旅行必备的好东西啊!!项目基本架构project│ README.md│ koa.js //用来在开发的时候调用框架│└───koa│ │ application.js //主程序│ │ content.js // 封装ctx对象...原创 2018-08-21 19:38:08 · 226 阅读 · 0 评论 -
手写一个服务器(四)
之前处理了常用的功能,这一节主要处理命令行参数,并在最后上传至npm将当前包链接之全局 进入到当前包的根目录,然后使用命令 npm link 这里需要注意的是,每次修改配置文件以后都需要重新执行命令 npm link配置执行目录和命令bin首先需要在package.json 添加命令bin// package.json"bin": { "my...原创 2018-08-16 09:51:22 · 227 阅读 · 0 评论 -
手写一个服务器(三)
上一节完成了目录以及内容返回,这一节完成文件的缓存,分片下载,压缩 这节的修改代码都在./src/app.js压缩// p 资源路径 statObj 当前资源状态 compress (req, res, p, statObj) { // 拿到请求头 let header =req.headers['accept-encoding']...原创 2018-08-16 09:50:41 · 317 阅读 · 0 评论 -
手写一个服务器(二)
上一节我们完成的服务起的目录搭建,并写了一个简单的服务,在这一节,将完成函数封装,返回内容…偷懒神器 每次我么在写玩代码都需要重新启动服务,简直蠢的不要不要的,这里我们使用 supervisor // supervisor 热更新模块 安装: npm install supervisor -g 使用:supervisor ./src/app.js...原创 2018-08-16 09:49:41 · 127 阅读 · 0 评论 -
手写一个服务器(一)
学习了很多HTTP的知识,这里通过手写一个HTTP服务来运用之前用到的知识。搭建项目结构//目录结构// 新建文件夹static./static+-- public | +-- index.html| +-- index.css| +-- index.js+-- src| +-- app.js| +-- config.js+-- pack...原创 2018-08-16 09:48:54 · 1026 阅读 · 1 评论 -
HTTP之proxy
Web 代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web 代理无处不在。提高访问速度。 因为客户要求的数据存于代理服务器的硬盘中,因此下次这个客户或其它客户再要求相同目的站点的数据时,就会直接从代理服务器的硬盘中读取,代理服务器起到了缓存的作用,对热门站点有很多客户访问时,代理服务器的优势更为明显。Proxy可以起到防火墙的作用。 因...原创 2018-08-12 15:25:48 · 23621 阅读 · 0 评论 -
http之压缩
在学习HTTP的时候我们会发现所有的HTTP请求和响应头都是独立的知识点,相互之间并没有关联,只有在实际的项目中,我们可能会用到多个响应头的设置。例如缓存,我们通常会使用协议缓存,强缓存,和ETAG,为了减少数据传输报的内同,我们通常会使用压缩来节省流量,这里学习一下node的压缩模块zlib 要学习压缩,首先要了解两个头, Content-Encoding: gzip 服务端...原创 2018-08-12 15:24:10 · 1150 阅读 · 0 评论 -
MongoDB上手之创建索引篇
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构特殊的数据结构,按顺序保存...原创 2018-11-23 20:09:40 · 1297 阅读 · 0 评论 -
MongoDB上手之部署篇
主从复制主从复制是一个简单的数据库同步备份的集群技术在数据库集群中要明确知道谁是主服务器,主服务器只有一台从服务器要知道自己的数据源也就是知道自己的主服务器是谁–master用来确定主服务器,–slave和–source 来控制从服务器主服务器master.confdbpath=E:\ms\masterport=1000master=truemaster.batm...原创 2018-11-25 08:49:01 · 222 阅读 · 0 评论 -
MongoDB上手之mongoose
MongoDB简介Mongodb是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得 轻巧、灵活,非常适合在数据规模很大、事和性不强的场合下使用。同时它也是一个对象数据库,没有表和行的概念,也没有固定的模式和结构,所有的数据都是以文档的形式存存储(文档,就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组、甚至是一个嵌套文档),数...原创 2018-11-25 10:54:28 · 305 阅读 · 0 评论 -
SQL学习之基础篇
什么是SQLStructured Query Language: 结构化查询语言为什么要用SQL使用界面操作数据库不方便我们需要通过应用程序去操作数据库SQL的组成DDL(data definition language) 是数据定义语言,主要命令有:CREATE, ALTER, DROP,等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初...原创 2019-01-18 17:28:03 · 163 阅读 · 0 评论 -
node打印彩色文字
我们很多时候都觉得自己使用console.log打印的文字看起来太单调,然后看别人写的框架封装的很漂亮。后来发现有一个chalk模块可以实现这个功能,后来就想啊,他们可以,我也可以的,遂百度,整理资料如下chalk 模块简单使用安装npm i chalkchalk使用以下是官方democonst chalk = require('chalk');const log...原创 2019-01-07 18:18:18 · 1968 阅读 · 0 评论 -
mysql学习之安装配置
数据库的作用存储大量数据,方便检索和访问保持数据信息一致性,完整性共享和安全通过组合分析,产生新的有用的信息数据库基本概念实体只要是在客观世界存在的,可以被描述出来的都是实体数据库(DB)就是数据仓库,可以存放结构化的数据数据库管理系统(DBMS)一种系统软件,提供操作数据库的环境,可以通过数据库管理系统对数据进行CRUD。SQL结构化查...原创 2019-01-10 17:33:11 · 182 阅读 · 0 评论 -
redis上手之性能测试和集群部署
性能测试Redis 性能测试是通过同时执行多个命令实现的。语法redis-benchmark [option] [option value]实例redis-benchmark -n 1000000====== PING_INLINE ====== 1000000 requests completed in 16.99 seconds 50 parallel client...原创 2018-12-08 14:56:46 · 653 阅读 · 0 评论 -
EGG单元测试
单元测试的优点代码质量持续有保障重构正确性保障增强自信心自动化运行测试框架mochajspower-assert测试约定测试目录结构我们约定 test 目录为存放所有测试脚本的目录,测试所使用到的 fixtures 和相关辅助脚本都应该放在此目录下。测试文件的目录和我们需要测试的文件目录必须保持一直测试脚本文件统一按 ${filename}.test.j...原创 2018-12-05 13:53:49 · 4858 阅读 · 0 评论 -
EGGJS学习
提供基于 Egg 定制上层框架的能力高度可扩展的插件机制内置多进程管理基于 Koa 开发,性能优异框架稳定,测试覆盖率高渐进式开发目录结构├── package.json├── app.js (app.js 和 agent.js 用于自定义启动时的初始化工作)├── agent.js (可选)├── app| ├── router.js(用于配置 URL 路由规则)...原创 2018-12-04 20:24:57 · 1774 阅读 · 0 评论 -
nginx简单配置上手
nginx是一个开源且高性能、可靠的HTTP中间件和代理服务器学习环境操作系统CENTOS>=7.0,位数 X64 CENTOS 7.2环境确认关闭 iptablesiptables命令是Linux上常用的防火墙软件功能命令停止防火墙systemctl stop firewalld.service永久关闭防火墙systemctl disable...原创 2018-11-30 14:34:12 · 733 阅读 · 0 评论 -
nunjucks简单上手
Nunjucks是Mozilla开发的一个纯JavaScript编写的模板引擎,既可以用在Node环境下,又可以运行在浏览器端安装npm install nunjucks使用渲染字符串let nunjucks=require('nunjucks');nunjucks.configure({autoescape: true});let ret = nunjucks.rende...原创 2018-12-04 15:01:52 · 3831 阅读 · 3 评论 -
Redis简单上手
Redis简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 优势性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。丰富的数据类型 – Redis支持二进制的字符串、列表、哈希值、集合和有序集合等数据类型操作。原子性 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执...原创 2018-12-02 09:09:43 · 398 阅读 · 0 评论 -
HTTP缓存
缓存的作用减少了冗余的数据传输,节省了网费。减少了服务器的负担, 大大提高了网站的性能加快了客户端加载网页的速度缓存分类强制缓存如果生效,不需要再和服务器发生交互,而对比缓存不管是否生效,都需要与服务端发生交互两类缓存规则可以同时存在,强制缓存优先级高于对比缓存,也就是说,当执行强制缓存的规则时,如果缓存生效,直接使用缓存,不再执行对比缓存规则强制缓存 强制缓...原创 2018-08-07 21:20:05 · 134 阅读 · 0 评论 -
HTTP之crypto
crypto是node.js中实现加密和解密的模块 在node.js中,使用OpenSSL类库作为内部实现加密解密的手段 OpenSSL是一个经过严格测试的可靠的加密与解密算法的实现工具散列(哈希)算法 散列算法也叫哈希算法,用来把任意长度的输入变换成固定长度的输出,常见的有md5,sha1等 相同的输入会产生相同的输入不同的输出会产生不同的输出任意的输入长度输出长...原创 2018-08-02 18:00:13 · 596 阅读 · 0 评论 -
HTTP之断点续传
这里主要是理解http断点续传的原理,如何通过http请求头操作,以及相应的请求和响应头的设置。server端实现// 断点续传// 客户端要发一个头 Range:bytes = 0 -1// 服务端返回一个头// Accept-Ranges:bytes// COntent-Ranges: 0-10/总大小const http = require('http')...原创 2018-08-02 08:47:02 · 3695 阅读 · 0 评论 -
Stream 模块学习(二)
在之前学习了node的可读流的用法这里模式实现一个简单的可读流类ReadStream,深入理解流的概念和和实现的过程创建ReadStream 类首先我们更具之前使用的样子 定义好类,已经一定需要用到的参数let EventEmitter = require('events')let fs = require('fs')//这里需要引入events,实现事件的发布订阅...原创 2018-06-24 18:06:24 · 654 阅读 · 0 评论 -
Stream 模块学习(一)
可读流(Readable streams)是对提供数据的 源头 (source)的抽象可读流工作在两种模式上边,flowing和pause在 flowing 模式下, 可读流自动从系统底层读取数据,并通过 EventEmitter 接口的事件尽快将数据提供给应用。在 paused 模式下,必须显式调用 stream.read() 方法来从流中读取数据片段。基本用法// 流 ...原创 2018-06-24 17:47:18 · 1495 阅读 · 0 评论 -
Fs模块学习(三)
这里主要是进一步使用其他方法删除目录,提高自己对fs模块提供的api的熟悉度异步删除(深度模式) 核心思想就是遍历完成某一个目录以后,在遍历另外一个目录,最后开始冒泡删除const fs = require('fs')const path = require('path')/** * * @desc 异步深度循环删除目录 * @param {string}...原创 2018-06-23 19:26:54 · 302 阅读 · 0 评论 -
Fs模块学习(二)
创建文件夹fs.mkdirSync 同步创建fs.mkdir 异步创建需要注意的是创建目录必须确保父级文件夹存在,默认创建的文件加会在当前目录的更目录//简单的使用示例const fs = require('fs')fs.mkdir('a', err => { if (err) throw Error(err)})同步创建文件夹(性能低)/...原创 2018-06-21 12:55:27 · 687 阅读 · 0 评论 -
手写node Event模块
代码很简单 思路也都写在代码里了,没有什么想说的了/** * @desc 学习理解弄得event模块,参照源码实现一个简单版的Event模块 * @module.exports = events对象 *//** * @desc 事件对象构造函数 * 通过该原型对象的原型拓展方法 */const events = function () { this._events = {...原创 2018-06-05 22:44:50 · 326 阅读 · 0 评论 -
node 学习之module
模块分为三大类:核心模块第三方模块文件模块,我们自己写的自定义模块几个常用的方法const fs = require('fs') fs:文件操作模块fs.access('file path'): 新增方法,判断一个文件是否存在,如果不存在会报错,存在则不会发生任何异常(Linux经典原则:没有消息就是好消息)const path = require('path') ...原创 2018-06-05 13:38:46 · 881 阅读 · 2 评论 -
NPM
安装node之后只能使用Node语言特性以及核心函数,我们还需要一个系统来下载,安装和管理第三方模块。在Node看这个系统被称为Node的包管理器(Node Package Manager => NPM)npm提供的功能 公共注册服务,用户可以把自己的写的包上传到服务器上命令行工具,用户可以通过npm命令把别人的包下载到自己的电脑上,还可以自己的模块依赖的其他模块搜索第三方报的地...原创 2018-06-11 13:14:12 · 662 阅读 · 0 评论 -
环境配置
安装包的方式安装安装包下载链接: Mac OSX: darwinWindows:x64x86安装操作: 一路Next更新版本操作方式: 重新下载最新的安装包;覆盖安装即可;问题: 以前版本安装的很多全局的工具包需要重新安装无法回滚到之前的版本无法在多个版本之间切换(很多时候我们要使用特定版本)NVM工具的使用 Node Version Manager(Node版本原创 2017-03-07 11:31:36 · 297 阅读 · 0 评论 -
Buffer对象学习
创建方式 Buffer 是global上的属性 申请内存,可以存放图片 文本 buffer 存的都是16进制的这种申请方式内存永远是比较感觉的,声明也比较费时通过长度来申请 let buffer = Buffer.alloc(6)这样声明会比较快,但是可能会又脏值 let buffe = Buffer.allocUnsafe(6)可以使用fill清空 buffe....原创 2018-06-16 17:41:49 · 722 阅读 · 0 评论 -
Fs模块学习(一)
fileSystem(fs): 文件模块,node核心模块,带有很多API, 常见的又fs.readFile, fs.open, fs.read, fs.write…引入模块const fs = require('fs') //这样我们就可以通过fs调用node提供的API了关闭编码的问题很多的时候我们会因为编码的问题,从而导致文件乱码,这里说一种中简单的处理方式n...原创 2018-06-17 16:55:31 · 2059 阅读 · 0 评论 -
Stream 模块学习(三)
writeStream 可写流是对数据写入’目的地’的一种抽象。### 使用方法如下默认写入的大小是16k写入的数据必须是buffer或者字符串方法主要有write,endlet fs = require('fs')let path = require('path')let ws = fs.createWriteStream(path.join(__dirna...原创 2018-06-30 22:03:53 · 138 阅读 · 0 评论 -
HTTP之多语言
很多时候我们需要处理多语言,而且网上多语言的解决方案很多,如设置cookie,请求头….. 我们这里用请求头做一个小demo,用来学习http请求头,顺便理解一下多语言的实现思路,话不多说,上代码// 多语言切换 vue-i18n// 可以支持语言切换// Accept-Language:[zh-CN,zh;q=0.9,en;q=0.8,fr-FR;q=0.7]// 服...原创 2018-08-01 08:48:52 · 2555 阅读 · 0 评论 -
HTTP之防盗链
很多时候别人直接把我们的网站的资源拿去在他们网站展示,但是消费的是我们的流量,为了解决这种问题,才会有防盗链这个思路 这里说的只是一个简单的概念,既使用host和reffer请求头做对比,简单的做一个处理,主要是用来熟悉http头这里就是代码// 防盗链实现// 这里主要是通过reffer和host做对比,如果不是当前域,则给一张无用的图片// 实现读取let...原创 2018-08-01 08:48:15 · 19720 阅读 · 2 评论 -
实现一个简单的tcp聊天室
这里写一个简单的聊天室,用来理解和使用net的api,方便自己理解,聊天室设计 可以展示当前在线人数,在线用户,使用指定命令进行操作默认情况下用户应该是匿名状态通过关机命令改名:r: newName支持显示在线用户列表 l广播功能: b: xxx私聊的功能: p:nickName: msg创建服务器const net = require('ne...原创 2018-07-31 09:22:59 · 3773 阅读 · 0 评论 -
Stream 模块学习(七)
在这之前实现了流的流动模式,这里实现一个流的暂停模式构建对象和方法let EventEmitter = require('events')let fs = require('fs')class ReadableReadStream extends EventEmitter { constructor (path, options) { super() ...原创 2018-07-15 15:35:06 · 273 阅读 · 0 评论