子匠_Zijor | 前端开发 / 程序媛 / 潜心学艺。

分类:Node.js

node.js中TCP Socket多进程间的消息推送

前段时间接到了一个支付中转服务的需求,即支付数据通过http接口传到中转服务器,中转服务器将支付数据发送到异构后台(Lua)的指定tcp socket。

image_1c25ihq2mmi116tlvkq1b811dg9.png-30kB

一开始评估的时候感觉蛮简单的,就是http server和tcp server间的通信,不是一个Event实例就能解决的状态管理问题吗?注册一个事件A…

+ 阅读更多

原生Node.js实现WebSocket的原理

let crypto = require('crypto');
let http = require('http');

let app = http.createServer();
let sockets = [];  // 存放每一个客户端socket的数组

app.on('upgrade', (req, socket, head) => {
    socket.setEncoding('utf8');  // 统一socket的编码格式为utf8

    //
+ 阅读更多

【摘记】node-xlsx的使用

node-xlsx文档地址:https://github.com/mgcrea/node-xlsx

node-xlsx依赖于 js-xlsx 组件,API极简单,可读写xlsx文件内容。

node-xlsx的主要使用方法如下:

1 . 读xlsx文件:

let xlsx = require('node-xlsx'),
    fs = require('fs');

const workSheetsFromBuffer = xlsx.parse(fs.readFileSync(`${__dirname}/myFile.xlsx`));
+ 阅读更多

[小笔记] Restify中接入Socket.io时报Error:Can’t set headers after sent.

在restify的官方文档中,接入socket.io的代码是酱汁的: http://restify.com/#socketio

var server = restify.createServer();
var io = socketio.listen(server);

// ...

io.sockets.on('connection', function (socket) {
    socket.emit('news', { hello: 
+ 阅读更多

Node.js:设置CORS跨域请求中的多域名白名单

说到CORS,相信前端儿都不陌生,这里我就不多说了,具体可以详看阮一峰老师的跨域资源共享 CORS 详解

CORS,主要就是配置Response响应头中的 Access-Control-Allow-Origin 属性为你允许该接口访问的域名。最常见的设置是:

res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Credentials',
+ 阅读更多

Mocha+Chai单元测试并没有想象中难

作为过来人,首先想说的是:不要怕!

刚从前端转来做Node的,从来没接触过单元测试,一听这个名词就觉得高大上。加上周围一些前端儿也基本没有接触过单元测试,总把单元测试看得比较遥远,中文教程也点到即止并有点过分重视命令行参数的讲解,让我迟迟不敢轻易入坑。

然而,当项目确实希望用到单元测试的时候,我决定抛开内心的恐惧,硬着头皮认认真真地读英文版的Mocha和chai Assert文档,发现,真的不过如…

+ 阅读更多

bluebird中的常用 Promsie API整理

bluebird是一个第三方的Promise类库,并且根据Promise A+规范实现,在ECMAScript 2015的基础上添加了很多扩展方法,如.spread()展开结果集、Promise.promisifyAll()将一个模块的属性方法包装成一个Promise实例。

blueBird的API文档可以查看这里

本文主要列举几个常用的API,方便在熟悉阶段的时候查用。

一. 核心API

new Promise()

+ 阅读更多

原生Node.js实现静态资源服务器

事起缘由:上个月面试的时候,面试官问我如何写静态文件服务器。额,这个,这个不是用Express里面的static方法一行命令就能搞掂的咩,要压缩的话一个Compress中间件就搞掂了呀?。。如果非要自己写的话,不就是createServer,监听一下路由,再读取文件输出文本流到客户端不就OK了吗?。。。。咦。。。稍…

+ 阅读更多

【译】node-mysql官方文档(未完结)

原文地址:https://github.com/mysqljs/mysql

安装

$ npm install mysql

有关前述0.9.x版本的版本信息,请访问V0.9分支

当有bug修正时,建议从Github上拉取最新版本代码,可执行如下命令:

$ npm install mysqljs/mysql

介绍

这是MySQL的一个node.js驱动程序,用JavaScript编写,不需要编译,并且100%遵循MIT协议。…

+ 阅读更多

Node.js中防止错误导致的进程阻塞的方法

在Node.js中,当某个回调函数发生了错误,整个进程都会崩溃,影响后面的代码执行。

Node.js这样处理,是因为在发生未被捕获的错误时,进程的状态就不确定。之后也就无法正常工作了。如果错误始终不处理的话,就回一直抛出意料之外的错误,这样不利于调试。

防止错误导致的进程阻塞的方法主要有如下两种:

一. try-catch

try-catch允许进行异常捕获,并让代码继续执行下去:

例如:

当函数抛出错…

+ 阅读更多

学习笔记:在Ubuntu中搭建Node.js开发环境

安装NodeJS

sudo apt-get update
sudo apt-get install nodejs

安装完成后执行nodejs -v,可查看Node.js是否安装成功。

有待继续完善 … ……

+ 阅读更多

学习笔记:node-mysql中防止SQL注入

备注: 本文针对mysqljs/mysql


为了防止SQL注入,可以将SQL中传入参数进行编码,而不是直接进行字符串拼接。在node-mysql中,防止SQL注入的常用方法有以下四种:

方法一:使用escape()对传入参数进行编码:

参数编码方法有如下三个:

mysql.escape(param)
connection.escape(param)
pool.escape(param)

例如:

var userId 
+ 阅读更多

学习笔记: Ubuntu下安装搭建MySQL环境

缘由: 为方便日后查阅,故整理并记录之。

一. 安装 MySQL

sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install php5-mysql // 安装php5-mysql是将php和mysql连接起来

二. 检查MySQL是否正在运行

sudo netstat -tap | grep mysql

当运行成功后…

+ 阅读更多

Node.js插件:supervisor自动监测文件修改

在node.js中,调试的时候,无论修改了代码的哪一部分,都需要重启Node.js服务之后才能生效。这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入。Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因为我们在开发过程中总是希望修改后立即看到效果,而不是每次都要终止进程并重启。

supervisor可以监测文件修改,并自动…

+ 阅读更多

Jade使用笔记

安装

npm install jade

在Sublime Text开发的配置

Jade语法高亮显示:

Jade代码高亮显示需要安装的插件有:Jade

Jade编译为HTML:

首先需要全局安装Jade模块:

npm install jade --global

然后,通过 Package Control 安装 Jade Build 插件。

使用时,在菜单 Tools > Build System 中,确认勾选了 AutomaticJade。在 …

+ 阅读更多

Node.js学习笔记:路径操作

Path模块的官方介绍在此:https://nodejs.org/dist/latest-v6.x/docs/api/path.html

path.normalize(path)

path.normalize(path)

参数值为需要被转换的路径字符串。

该方法将非标准路径字符串转换为标准路径字符串,在转换过程中执行以下处理:

1) 解析路径字符串中的”..”字符串与R…

+ 阅读更多

Node.js学习笔记:读写流Stream

一. 可读流: stream.Readable

在Node.js中,各种实现了stream.Readable接口的对象可以将对象数据读取为流数据,所有这些对象都集成了EventEmitter类的实例对象,在读取数据的过程中,将可能触发各种事件。

在Node.js中,可以使用flowing模式与非flowing模式来读取数据。当使用flowing模式时,将使用操作系统…

+ 阅读更多

Node.js学习笔记: 文件权限和读写flag属性

老是记不住文件或目录权限的数值表达和字符表达。故整理出该笔记,方便以后查阅。

文件权限的数字类型

用数字来代表各个权限,各权限的分数对照表如下:

  • r: 4
  • w: 2
  • x: 1

文件的基本权限有9个,分别是owner、group、others三种身份各有自己的read、write、execute权限。例如文件的权限字符为”-rwxrwxrwx”这9个权限是三个三个一…

+ 阅读更多

Node.js学习笔记:获取文件信息

一. 查看文件信息的方法:

fs.stat() && fs.lstat()

在fs模块中,可以使用fs.stat()方法或fs.lstat()方法查看一个文件或目录的信息,如文件的大小、创建时间、权限等信息。这两个方法的唯一区别是当查看符号链接文件的信息时,必须使用fs.lstat()方法。这两个方法的使用方式如下:

fs.stat(path, callback)
fs.lstat(path, callback)
+ 阅读更多

Node.js的优秀模块整理: 调试篇

目录:

  • supervisor 监视代码改动
  • node-inspector 可使用浏览器调试Node.js

监视代码改动:supervisor

默认情况下,Node.js并不能监视代码的实时改动。当修改代码的某一部分时并不能实时看到修改后的效果,你必须终止Node.js再重新运行。这虽然有利于提高性能,但是并不利于开发调试。

supervisor可以监视代码的改动,并自动重启Node.js。

$ npm install 
+ 阅读更多

CommonJS学习笔记

符合CommonJS规范的包应该具备以下特征:

  • package.json必须在包的顶层目录下;
  • 二进制文件应该在bin目录下;
  • JavaScript代码应该在lib目录下;
  • 文档应该在doc目录下;
  • 单元测试应该在test目录下;

package.json文件

Node.js在调用某个包时,会首先检查包中的package.json文件中的main字段,将其作为包的接…

+ 阅读更多

在项目开发中优雅地使用ES6:Traceur & Babel

ES6于2015年6月正式发布,各大浏览器的最新版本对 ES6 的支持可以查看https://kangax.github.io/compat-table/es6/

目前各大浏览器和开发环境对支持ES6的支持情况参差不齐,在实际项目开发中,我们仍旧不得不降级使用ES5语法以兼容各平台。幸好有几款工具可以将ES6语法转换成ES5,让我们在使用ES6新特性编写代码的同时,不需要考虑具体的兼容性情况。

将ES6代码转换成ES5代…

+ 阅读更多

Node.js学习笔记:Buffer模块处理

Node.js学习笔记:Buffer模块处理

标签(空格分隔): node.js


Buffer的官方API文档

Buffer像一个Array对象,主要用于操作字节。它是一个典型的JavaScript与C++结合的模块,将性能相关部分用C++实现,非性能相关的部分用JavaScript实现。

Buffer所占用的内存不是通过V8分配的,是在Node的C++层面实现内存的申请,属于堆外存。

Node在进程启动时就已经加载了Buffer,并将其放在全局…

+ 阅读更多

Node.js的HTTP模块

Node.js标准库提供了http模块,其中封装了一个高校的HTTP服务器和一个简单的HTTP客户端。http.Server是一个基于事件的HTTP服务器;http.request则是一个HTTP客户端工具,用于向HTTP服务器发送请求,实现内容抓取。

一. HTTP服务器

http.Server提供一套封装级别很低的API,仅仅是流控制和简单的消息解析。

可以使用http.CreateServer()来创建…

+ 阅读更多

Node.js学习笔记:文件的常规操作

Node.js的文件操作部分的官方API文档如下:
https://nodejs.org/api/fs.html

fs模块是文件操作的封装,它提供了文件的读取、写入、更名、删除、遍历目录、链接等POSIX文件系统操作。与其他模块不同的是,fs模块中所有的操作都提供了异步和同步的两个版本,例如读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync()。

进行文件操作前,都…

+ 阅读更多