
NodeJS编程实战
文章平均质量分 50
nodejs编程系列教程,将涉及nodejs编程的方方面面,总体而言属中高级nodejs教程。
内容个涉及:语法、函数、特定用法、模块、实用性技术、产品常用的相关知识与案例、高级技巧、黑科技类知识等。
全系列教程以案例、实例为重,基本每篇都会有示例代码,以达到眼见为实的效果,同时也会有相关理论说明。
w2sfot
JavaScript编程技术
展开
-
WebPack插件实现:打包之后自动混淆加密JS文件
在WebPack中调用JShaman,实现对编译打包生成的JS文件混淆加密。原创 2024-05-29 08:42:49 · 1430 阅读 · 0 评论 -
Node.JS中调用JShaman,加密JS代码
在Node.JS环境中,调用JShaman的WebAPI接口,对JS代码进行混淆加密。原创 2022-11-12 08:56:28 · 766 阅读 · 0 评论 -
NodeJS编程实现:打开有密码的ZIP文件
经过许久查找,终于从国外资料站查到一个支持密码的zip模块,以下便分享给大家:原创 2022-03-02 18:17:13 · 1893 阅读 · 1 评论 -
十个古老而又强大的正则表达式,能让你少写1000行JS代码
正则表达式,十分古老而又强大。熟悉掌握并使用,可以在编程时节省很多时间和精力,开发效率得到极大的提升。比如下面这十个正则表达式,是日常前JS开发中经常用到的,且都验证过,可直接使用,建议收藏:1、Email地址验证var reg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;var email = "abc@qq.com";if(email.match(re原创 2022-02-24 15:42:45 · 1361 阅读 · 0 评论 -
NodeJS堆溢出的原因,及解决办法。
NodeJS堆溢出的原因,及解决办法。NodeJS内存溢出的原因及解决办法。使用NodeJS开发的应用,如果需要处理大量数据,可能导致堆溢出。错误提示中,会有“JavaScript heap out of memory”,如下图:通过调试分析,会发现:在出错之前,其使用的内存量是一直增大的:如本例测试时,起初:中途,内存用量一直增长:当内存使用量超过约2048MB后,即会出错。这个问题的原因,是由于NodeJS在启用时,默认使用的内存量是受限的,大原创 2021-12-29 19:02:09 · 1682 阅读 · 0 评论 -
nodejs中,如何使socket.io同时启用http和https协议?
nodejs中,如何使socket.io同时启用http和https协议?Socket.io是NodeJS中常用的websocket通信服务端组件。通常可以绑定一个http或https服务。代码如:const server = require('http').createServer();const io = require('socket.io')(server);但此种方式,有个很大的弊端:只绑定了http或https中的一种,前端访问不支持双协议,如果绑定的是htt原创 2021-12-06 10:39:25 · 1152 阅读 · 0 评论 -
逆生三重:JavaScript代码混淆加密技术展示
JavaScript代码混淆加密,无论在前端、H5、或是后端,都是被广泛需要的,用于保护JS源码,防止源码被分析、复制、破解、盗用。本文简单展示部分JS代码混淆加密技术,用于演示对JS代码进行混淆加密的有效性。本文所述,原理上而言:一段原始JS代码将经历词法分析、语法分析,由代码逆变为AST(抽象语法树),再对AST进行三重混淆加密,最后再将AST重建为代码。例如,两句JS代码,给变量,赋常量值:var a = 1234;console.log("a=",a);一重保护:将常原创 2021-10-19 11:48:45 · 412 阅读 · 0 评论 -
JS混淆加密:变量赋值Eval加密
先来看实现后的效果:能看出这是一句赋值语句吗?它混淆前的源码是:即:a=2;这一句。更准确的说是:此图的效果是a=2;的第一重保护。再经二重加密,会成为第一张图片所示效果。二重的加密,会使赋值操作更为隐密。实现方式是:即,处理:AssignmentExpression,把整行语句的每个字符用fromCharCode函数转为数字。再把赋值语句转为eval函数调用表达式,用于执行语句,使赋值操作正常完成。执行效果如下原创 2021-10-19 08:41:17 · 365 阅读 · 0 评论 -
JavaScript小知识:什么是IIFE?
IIFE,全称为:Immediately Invoked Function Expression,在JavaScript编程中,是:立即调用函数表达式。型:(function () { statements})();这是一个被称为 自执行匿名函数 的设计模式,主要包含两部分。第一部分是包围在 圆括号运算符 () 里的一个匿名函数,这个匿名函数拥有独立的词法作用域。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域。第二部分再一次使用 () 创建了一个立即执行函数原创 2021-08-11 11:29:48 · 499 阅读 · 0 评论 -
js加密算法库:crypto-js
crypto-js是个很流行的js加密算法库,可以前端js中使用,也可以在后端的nodejs开发中使有,目前crypto-js已支持的算法有:MD5,SHA-1,SHA-256,AES,Rabbit,MARC4,HMAC,HMAC-MD5,HMAC-SHA1,HMAC-SHA256,PBKDF2等。使用也非常简便,在js中引入库,使用加密算法即可。详细,请从npm了解吧:https://www.npmjs.com/package/crypto-js另外,如果在使用加密算法时,对调用原创 2021-08-04 16:10:49 · 525 阅读 · 0 评论 -
node.js开发,res.end出现中文乱码,如何解决?
NodeJS开发,用res.end输出中文字符时,出现乱码:解决方法:在res.end前,设置输出内容使用的字符集为utf-8:然后,再res.end,即可正常:发布于刚刚原创 2021-07-01 19:10:58 · 974 阅读 · 0 评论 -
Docker使用入门:安装、创建镜像、加载并运行NodeJS程序。
Docker是非常流行的容器化部署方案,具有简单化、高稳定性等特点,在实际的产品交付、实施中非常实用。本文从docker的安装、使用,以及一个nodejs实例程序,从零入手,演示docker的实际使用全过程,并附有使用过程中常见问题的解决办法。系统环境:win7一、安装docker从Docker官网下载并安装docker-ToolBox,并安装安装完毕,出现三个图标:二、创建docker镜像Docker可以通过Dockerfile文件内容来动构建镜像...原创 2021-06-18 10:33:33 · 1675 阅读 · 1 评论 -
NodeJS、Express,判断一个请求是否是Ajax模式?
在NodeJS开发的后端程序中,如何判断一个请求是否是Ajax(Asynchronous JavaScript and XML,即:异步的 JavaScript 和 XML)。开发环境NodeJS,使用Express框架。据资料称,方法是判断请求头字段x-requested-with是否是xmlhttprequest。代码如:req.headers["x-requested-with"].toLowerCase() == "xmlhttprequest"。但实测发现,此方法不生效。原创 2021-05-25 10:48:42 · 386 阅读 · 1 评论 -
ModSecurity规则分析(一)
分析目标:owasp-modsecurity-crs-3.3-dev的正则规则。规则类型:正则表达式用途:识别数据库名探测的规则:原规则:"@rx (?i:\b(?:(?:m(?:s(?:ys(?:ac(?:cess(?:objects|storage|xml)|es)|(?:relationship|object|querie)s|modules2?)|db)|aster\.\.sysdatabases|ysql\.db)|pg_(?:catalog|toast)|infor原创 2021-04-14 11:00:19 · 690 阅读 · 0 评论 -
NodeJS实战73:syslog日志服务器的建立和使用。
syslog是一种标准化的、常用的日志协议,很多日志服务器都使用syslog,特别是远程日志服务。本文将实战建立syslog服务器,并演示syslog客户端发送日志信息到syslog服务器。syslog服务器的建立nodejs编程实现syslog-server:npminstallsyslog-server准备以下代码:即可快速建立起一个syslog服务器。然后,准备syslog客户端:中例中,在ShareWAF的二次开发中实现syslog客户端:...原创 2020-06-26 19:59:57 · 770 阅读 · 0 评论 -
另类代码保护:把JS代码编译成字节码。
当使用NodeJS开发了产品或项目,在交付、给他人部署时,直接提供代码进行部署是很不妥的:JS源代码直接就交出去了!直接就是源码泄露。为了保护代码、保护自身利益,通用在交付给他人之前,都会进行代码保护。对于JS这类代码,通用的是使用JShaman之类JS代码混淆加密平台,对代码进行保护。当然也有另类的非主流方式,比如本文,将教给大家一种将NodeJS代码编译成字节码的方式。下面提供源码级的方案,使用环境也是Nodejs。1、编译JS代码为字节码原理是使用V8引擎虚拟机技术进行J.原创 2020-06-01 18:51:58 · 1416 阅读 · 0 评论 -
简单几行代码,实现Node.js程序发邮件。
引言本文将通过一个Nodejs的模块Nodemailer介绍如何在nodejs程序中发邮件。Nodemailer是Node.js应用程序的一个三方模块,可以轻松实现电子邮件的发送,在大多数时候,它已经成为Node.js中开发邮件客户端的首选方案了。安装nodemailer的安装非常简单,一句话足以npm install nodemailer邮箱设置16...原创 2020-04-04 10:20:17 · 344 阅读 · 0 评论 -
NodeJS如何实现真正的长连接?
什么是长连接?长连接,即:keepalive启用。通俗的讲:非长连接状态下,每个请求与服务器通信完毕后,通道就关闭了。再次请求时,还需要重新打开通道。而如果是长连接,请求完成后,通道在一定时间内不会关闭,再次请求时不需要重开通道,这是就有通信效率上的优势。什么时候适合启用长连接?1、当web上的静态网页,如:Html、图片、Css、Js居多时,建议启用长连接 。...原创 2020-03-25 21:46:22 · 3022 阅读 · 0 评论 -
JS无法读取本地json、txt、xml文件?可以用jsonp可以。
想自己用 js写一个原生的ajax请求,访问本地文件:json/txt。但是写了一个后,发现不能读取:原来是读取本地文件被识别为跨域,是不能读取的。js写的原生ajax 请求代码如下。html代码:<div id="myDiv">将获取的txt 文件 展示出来</div><button type="button" onclick="lo...原创 2020-03-16 11:23:50 · 1822 阅读 · 0 评论 -
挑战不可能:只用6个字符,写JS程序
先来看一个奇怪的JS字符串:(![]+[])[+!+[]+!+[]+!+[]]+(![]+[])[+!+[]+!+[]+!+[]+!+[]]+(![]+[])[+!+[]+!+[]]+(![]+[])[+[]]不要疑惑,这是JS编程(包括NodeJS)中可以正常输出的字符串。如果alert或console出来,你猜运行结果是什么?console.log( (![]+[...原创 2020-03-12 10:17:44 · 275 阅读 · 0 评论 -
Node.JS实战69:ES6新特性:模板字面量。
S6提供了一种新的更强大的语法来定义字符串,被称为:模板字面量。它的语法不使用单、双引号,而是使用反引号。它有两个好处:1、可以在字符串中使用${}插入变量。2、可以轻松的写在多行。且看例程:var w = "jshaman";var str = `JS代码混淆加密,就用${w}`;console.log(str);console.log("");va...原创 2020-02-21 12:37:42 · 417 阅读 · 0 评论 -
Node.JS实战64:ES6新特性:Let和Const。
以往版本的JS中,如果你在if中定义一个变量,这个变量在if外部也是可以访问的,而不管if条件是否被执行,如:if(false){varx="helloJShaman"}console.log(x);执行这段代码不会失败、不会报错,但会输出undefined:这情况很可能会引起bug,而且很难找出原因。在ES6(即:ES2015)中,为了解决...原创 2020-02-14 08:49:30 · 332 阅读 · 0 评论 -
Node.JS实战60:解除“封印”!给Node更多的内存。
这一节,不讲编程,谈点很有用的知识!默认情况下当用node启动我们的程序时,可用的最大内存量是512MB。如果程序运行时使用的内存量超过这个值,就会报错。本文,告诉大家如何解除这个封印,给Node程序更多的可用内存。如上图中,为了展示内存不足的错误,我们给node启动加了一个参数:--max_old_space_size=1,含意为:只给程序1MB的内存。被启动的是ShareW...原创 2020-01-30 17:27:25 · 1304 阅读 · 0 评论 -
Node.JS实战59:负载均衡的实现。
在大型网络结构中,或流量大的网站上,负载均衡是必备的。用于实现流量负载、高可用。负载均衡常用的是NGINX、HAProxy、F5等。而我们的Node.JS开发,实现一个负载均衡,是不那么困难的。本文将实现一个负载均衡系统,而且是一个高端的动态负载均衡系统。它将备以下功能:1、动态添加负载;2、自动、随机选择负载。使用效果:1、添加负载:密码的设置是为...原创 2020-01-30 09:09:31 · 1411 阅读 · 0 评论 -
Node.JS实战58:写一套反爬虫系统!
爬虫,网络安全最大的威胁之一!根据爬取数据类型而分,爬虫有不少种类,比如爬取Email地址的、爬取商品价格的、爬取图片的,而最多的是爬取内容的,内容数据爬虫是为泛滥的!爬虫让很多人对其深感苦恼,今天的Node.JS实战,将实现一种防护性能很强的反爬虫系统。首先展示防护效果,然后付上完整代码,以了解实现方法。防护效果展示根据两个核心思路进行效果展示如下:1、字体加密创...原创 2020-01-29 10:28:28 · 1209 阅读 · 0 评论 -
Node.JS实战57:给图片加水印。
很多时候,为了保护版权、保护原创,或是宣传的需要,我们需要给图片加水印的。Node.JS中给图片加水印是很简单的,通过一个三方库:images可以很方便的实现。本示例有三个文件,一个程序文件、一张图片、一个水印图片:图片可以是jpg或png,水印需要是PNG,因为水印可能要做个圆角或其它部分可能需要透明的形状。实现代码:var images = requi...原创 2020-01-21 17:41:30 · 1254 阅读 · 0 评论 -
Node.JS实战56:编写一个真正的模块,能发布到NPM上的模块!
NPM是Node的包管理工具,Node的所有三方模块,都在NPM上。今天的文章,是重量级的。展示如何写一个真正的模块,并发布到NPM,可以让他人使用自己的模块!首先是模块。要发布到NPM,模块本身真是够份量的,实现了某个功能,或能真正解决某些问题,或在某些场景下能帮到他人。模块:express-waf-middleware本文的模块,来之前于前面文章讲到过的一个思路:给ex...原创 2020-01-19 12:15:30 · 284 阅读 · 0 评论 -
Node.JS实战55:REPL,知道它强大,但不知道它竞有这么强大!
在Node中,有一个神器:REPL,全称是:Read Eval Print Loop。即:交互式解释器。从名称上,看不出它能干什么。那么,我们直接从一个示例来看吧:本文共需两个程序:首先是test55.js,它用以前文章中的一个例程代码,再加一个REPL服务器功能:var http = require("http");var test="this is a test";...原创 2020-01-19 12:02:49 · 303 阅读 · 0 评论 -
Node.JS实战54:对Node程序进行性能分析。
对于小程序而言,性能分析无关紧要。但对于大程序,性能分析则非常重要。通过性能分析,可以分析出哪部分功能、哪部分代码消耗了时间。对于想要进行代码优化,性能分析是必须的。如何进行性能分析?下面展示:首先写一个例程:function makeLoad(){ for(var i=0; i<100000; i++);}function logSomeThing(...原创 2020-01-19 11:54:49 · 309 阅读 · 0 评论 -
Node.JS实战53:调试node程序。
当需要检测问题、调试,甚至想要一步步的运行代码时,使用调试器是最好的办法。Node有内置的调试器:debug,而且颇强大,可以下断点、查看变量、单步执行等等。下面通过一段示例,展示其用法:var a = 1; function b(){ a = 2; } b(); a = 3; a = 4; debugger; a = 5; var c; a = 6; console....原创 2020-01-19 10:05:23 · 228 阅读 · 0 评论 -
Node.JS实战52:捕获错误之“未捕获的异常”。
造成Node程序崩溃的,几乎都是“未捕获的异常”。当一个“未捕获的异常”出现时,Node会默认的终止进程的执行。其实process.on()方法可以捕获进程级的异常,如:var http = require("http");var server = http.createServer(function(req,res){ response.end("Hello JShama...原创 2020-01-19 09:50:59 · 659 阅读 · 0 评论 -
Node.JS实战51:捕获错误之“错误参数”。
先来展示一个示例:var fs = require("fs");fs.readFile("./no_file.txt",function(err,buf){ var data = buf.toString(); //这一行会出错});执行这个程序,如果当下目录下不存在no_file.txt文件,那么必然会发生错误的:对于这处错误,该如何处理呢?当然可以这样:...原创 2020-01-19 09:38:59 · 251 阅读 · 0 评论 -
Node.JS实战50:捕获错误之“错误事件”。
在Node中,错误事件可以在任意继承EventEmitter的对像中触发,这点很重要。如果我们继承了一个事件,而没有给它设定错误处理函数,则错误发生是不可避免的。例程:var Event_Emitter = require("events").EventEmitter;var ee = new Event_Emitter();ee.emit("error",new Error...原创 2020-01-19 09:32:40 · 389 阅读 · 0 评论 -
Node.JS实战46:断言,调试和测试必备。
assert模块,即断言,是Node的内置模块。常用于程序调试、单元测试,也可用于实现错误处理逻辑。且看其最常见用法:assert.equal()equal方法接受三个参数,第一个参数是实际值,第二个是预期值,第三个是错误的提示信息。例程:var assert = require('assert');function add (a, b) { return a...原创 2020-01-18 13:34:59 · 355 阅读 · 0 评论 -
Node.JS实战44:非常好用的数据库:SQLite!
在Node.JS中,如果选择轻量级、嵌入式数据库,Sqlite必定是首选。它不需要像别的数据库一样事先得进行安装、配置,而是可以直接通过node install像安装三方模块一样安装、然后马上使用。当然它的性能也是勿需质疑的强劲,亿级数据存储、异步处理毫无压力。这也是选择它的另一个理由。安装npm install sqlite3这样除了安装sqlite3的npm包,也装了...原创 2020-01-18 09:36:53 · 1226 阅读 · 0 评论 -
Node.JS实战43:Prune,给项目瘦个身。
Node.JS的项目,都会依赖三方模块的。在开发过程中,可能使用了某些模块,而后来的某个环节可能又不再使用。而每次用个,每npm install一次,都会在node_modules中存留文件,如何往复,时久之外,node_modules目录就会变的臃肿起来。如:有一种方法,可以给此项目依赖的三方模块文件夹瘦身,清除掉不再需要的文件。这个方法,仅一条命令:npm p...原创 2020-01-18 09:33:13 · 633 阅读 · 0 评论 -
Node.JS实战41:让命令行变的五颜六色!
通常情况下,命令行文字都是黑底白色的:想不想来点改变?给文字换个颜色;给背景换个颜色。先来看段代码:console.log('\u001b[31m Hello www.JShaman.com \u001b[0m');console.log('\u001b[32m Hello www.JShaman.com \u001b[0m');console.log('\u001b...原创 2020-01-18 09:23:33 · 1709 阅读 · 0 评论 -
Node.JS实战35:给程序留一个“后门”。
本文讲的技巧性知识,有很多正面、合理的应用场景。先看代码:var express = require('express');var app = express();//内置中间件,静态文件访问app.use(express.static('./'))//监听var server = app.listen(8000, function () { var host =...原创 2020-01-17 13:03:43 · 1081 阅读 · 0 评论 -
Node.JS实战26:强大的工作池。收藏吧!你一定会用的到。
在实际项目中,如果遇到需要大计算量的操作,按需fork(分叉)其实不是一个好的选择。因为fork的子进程也是V8(NodeJS的核心引擎)的新实例,每创建一个新实例,需要约30毫秒启动时间,和至少10MB的初始内存。也就是说,创建进程是有代价的,你不能创建太多,也不能频繁创建。那样,达不到提高进程效率的目的。那么,该如何高效优雅的使用子进程呢?工作池!工作池!合理的办法是创建一...原创 2020-01-16 21:14:56 · 415 阅读 · 0 评论 -
Node.JS实战25:重要!大运算量?用Fork、让子进程来做!
实际项目中,很多时候都会有这种情况:某些功能是有大数据量运算的,或者进行很消耗资源的操作。这种情况下,如果在主线程中处理,会严重主线程的整体性能。合理的方法是:把可能对主线程造成压力的工作量,放到子进程中去,让子进程去独立完成。Forking(分叉)child_process有一个fork(分叉)方法,可以满足上面的想法:var cp = require("child...原创 2020-01-15 17:55:38 · 1446 阅读 · 0 评论