Node.js 的 http 模块是用于创建 HTTP 服务器和客户端的一个内置库。它允许开发者处理来自浏览器的请求,发送响应,并构建 RESTful API、Web 服务器等。以下是关于 http 模块的一些基本使用方法和概念:
创建 HTTP 服务器
最简单的 Node.js HTTP 服务器可以这样创建:
const http = require('http');
const server = http.createServer((req, res) = {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/p
了解JavaScript中的Stream模块,特别是针对Node.js环境,是一个提高应用程序处理数据效率的关键技能。以下是一个简单的入门教程,帮助您开始使用Node.js中的Stream模块。
1. 安装Node.js
首先,确保您的计算机上安装了Node.js。如果还没有安装,请访问Node.js官网下载并安装最新版本。
2. 创建项目
在您喜欢的位置创建一个新的目录,然后在该目录下初始化一个新的Node.js项目。打开终端或命令提示符,执行以下命令:
mkdir my-stream-app
cd my-stream-app
npm init -y
3. 使用Readline模块读取文
在Node.js中安装第三方模块主要通过npm(Node Package Manager,节点包管理器)来完成。以下是安装第三方模块的步骤:
1. 安装Node.js和npm
首先确保你的系统上已经安装了Node.js,因为npm是随Node.js一起安装的。你可以访问Node.js官方网站下载并安装适合你操作系统的Node.js版本。
安装完成后,可以通过以下命令检查Node.js和npm的版本,以确认它们是否成功安装:
node -v
npm -v
2. 使用npm安装第三方模块
全局安装
全局安装通常用于那些需要作为命令行工具使用的模块。例如,安装express-generator(
Node.js 的内置模块是随 Node.js 环境直接提供的,无需单独安装,可以简化开发过程并提供基础功能。以下是一些核心且常用的内置模块及其简要说明:
buffer:处理二进制数据,Buffer 类用于创建、操作二进制数据缓冲区。
child_process:用于在 Node.js 中创建子进程,执行shell命令或运行其他程序。
cluster:提供简单而强大的多进程管理,用于负载均衡和提高Node.js应用的性能。
crypto:提供加密功能,包括创建哈希、 HMAC、加密解密等。
dgram:实现UDP(用户数据报协议)的socket通信。
dns:进行域名解析,允许Node.js
Node.js 模块是 Node.js 环境中的基本构建块,它允许开发者将代码组织成独立的、可重用的部件。模块有助于提高代码的可维护性、可读性和减少全局命名冲突。Node.js 采用 CommonJS 规范来实现模块系统。
基本概念
模块分类:Node.js 中的模块大致可以分为两类,一类是内置模块(如 fs, http, path 等),这些模块由 Node.js 官方提供,无需安装即可使用;另一类是外部模块或自定义模块,这类模块需要通过 npm(Node Package Manager)安装或者开发者自己创建。
导出(module.exports 和 exports):模块可以通过
一,简单的权限模型有个访问权限列表如下:用户1 -- 查看文件
用户1 -- 编辑文件
用户2 -- 查看文件
用户2 -- 编辑文件
...
每个用户的每个权限,都保存在该表中,这种直接将权限绑定在用户上的方式就叫做基于用户的权限管理,ACL(Access Control List)。ACL的优点是简单易用、易于理解。缺点是系统逐渐复杂以后,用户和权限直接挂钩,授予权限时比较分散、不能集中管理,增加了复杂性。这时,人们就设计了基于角色的访问控制 RBAC(Role Based Access Control)。二,RBAC 基于角色的访问控制通过角色关联用户,角色关联权限的方式间接
1,实现在终端同一行输出不同内容import readline form 'readline';
console.clear();
setInterval(() = { //删除光标所在行
readline.clearLine(process.stdout, 0); //移动光标到行首
readline.cursorTo(process.stdout, 0, 0)
process.stdout.write(new Date().toLocaleString(), 'utf-8');
}, 1000);
2, 实现进度条import readline form 'readline
一,过去
跨站请求伪造,也称为CSRF或XSRF, 它源于网站必须向另一个站点发出请求的简单功能。
假设我在 https://a.com 面中嵌入了以下表单。
form action="https://your-bank.com/transfer" method="POST" id="stealMoney"
input type="hidden"name="to"value="Scott Helme"
input type="hidden"name="account"value="14278935"
input type="hidden"name="amount"v
使用 url.parse() 函数转换
'https://www.yuque.com!.evil.com'
'https://www.yuque.com%0a.evil.com'
会变成:
'https://www.yuque.com/!.evil.com'
'https://www.yuque.com/%0a.evil.com'
可以看到 legacy API 并不认为 ! 字符属于域名的一部分,所以原始的 www.yuque.com!.evil.com 域名其实是非法的,而为了不抛异常,legacy API 尝试对它进行了一次转换,把它当成 www.yuque.com/!.ev
Node.js 18.x 开始支持内置单元测试
单元测试很重要,很多新兴的编程语言都是会内置对应的能力,但 Node.js 这块一直都是由社区来实现,前端同学耳熟能详的 Test Runner 有 Mocha、Jest。
2022年04月19日正式发布的 Node.js 18.x ,终于,官方支持了 Test 能力。Fetch API 也被集成到这个版本中了。测试 API 接口在一定程度上代替 SuperTest 了。
代码:
import test from 'node:test';
import assert from 'assert/strict';
// 等价于 describe()
简介做爬虫解析 HTML,之前一直是用 cheerio,随着 jQuery 的渐行渐远,使用 cheerio 的类 jQuery API 已经成为一种负担, 我使用这个支持 Selectors API 的解析器 node-html-parser 来代替 cheerio。前后端的 HTML Selectors API 终于统一了。官方地址:https://www.npmjs.com/package/node-html-parser在 npmjs.com 的周下载量是:1,777,505。 cheerio 的周下载量是 6,696,323。执行速度上:cheerio :12.072
var assert = require("assert");
var request = require('supertest');
// describe('接口测试', async function () {
const http = require('http');
const app = require('../../app');
const PORT = process.env.PORT || 3003;
const SERVER = http.createServer(app.callback());
it('获取 API 版本信息', (done) = {
let
Jest 简介Jest 是一个越来越流行的测试框架,使用率渐渐超过了Mocha, 这些项目都在使用 Jest:Babel、 TypeScript、 Node、 React、 Angular、 Vue 等等!Jest 的目标是在大部分 JavaScript 项目上实现开箱即用, 无需配置。从 it 到 expect - Jest 将整个工具包放在同一个 地方。好书写、好维护、非常方便。快速上手npm install --save-dev jest
下面我们开始给一个假定的函数写测试,这个函数的功能是两数相加。首先创建 sum.js 文件:function sum(a, b) {
return
一,TypeScript 基本操作安装 TypeScript:npm install -g typescript
编写 test.ts 文件function greeter(person: string) {
return "Hello, " + person;
}
let user = [0, 1, 2];
document.body.innerHTML = greeter(user);
编译 ts 文件生成 js 文件:tsc test.ts
提示:greeter.ts(7,26): error TS2345: Argument of type 'number[]'
is no
一、N-API 开发方式介绍在 NAN 的开发方式下,一次编写好的代码在不同版本的 Node.js 下也需要重新编译,否则版本不符的话 Node.js 无法正常载入一个 C++ 扩展。即一次编写,到处编译。而 N-API 相较于 NAN 来说,它把 Node.js 的所有底层数据结构全部黑盒化,抽象成 N-API 当中的接口。不同版本的 Node.js 使用同样的接口,这些接口是稳定地 ABI 化的,即应用二进制接口(Application Binary Interface)。这使得在不同 Node.js 下,只要 ABI 的版本号一致,编译好的 C++ 扩展就可以直接使用,而不需要重新编译。
项目地址:https://www.npmjs.com/package/koa-csrf安装:npm install koa-csrf
需要配合session使用:// CSRF 防御
const CSRF = require('koa-csrf');
const csrfMD = new CSRF({
invalidSessionSecretMessage: 'Invalid session secret',
invalidTokenMessage: 'Invalid CSRF token',
invalidTokenStatusCode: 403,
});
router.post
XSS:Cross Site Scrit 跨站脚本攻击(为与 CSS 区别,所以在安全领域叫 XSS),通常是指黑客通过“HTML注入”,篡改了网页,插入了恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种方法。跨站已经不重要,现在叫做“HTML注入”可能更加合适,单因为历史原因XSS这个名字一直保留下来。一,输入检查1.1 格式检查比如用户注册时检查账户、电话号码、邮件和生日等信息,都有一定格式规范。比如 "lordwang" 是一个合法的用户名,而字符串 "lordwang';select..." 不是一个合法的用户名。某种意义上,这些都属于白名单,可以让大部分攻击无效。Node.js
一,进程和线程简介进程是资源分配的最小单位,线程是CPU调度的最小单位 进程:进程是一个有独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,一般定义是:进程由程序,数据集合和进程控制块三部分组成。(进程是资源分配的最小单位)。 线程:在早期的操作系统中并没有线程的概念,随着计算机的发展,为了应对进程之间的切换带来的巨大开销,就发明了线程,线程是程序执行中一个单一的顺序控制流程,一个进程可以有一个或多个线程,各个线程之间共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是c
实现websocket主要是两点,一个是协议的升级,再者就是数据包的解析与封装。目前比较火的websocket框架有socket.io 和 wssocket.io http://socket.io:43.5k star实际上不是一个 WebSocket 库,而是一个实时 pub/sub 框架。简单地说,Socket.io 是包含 WebSocket 功能的一个框架,如果要使用该库作为 server 端的服务,则 client 也必须使用该库,因为它不是标准的 WebSocket 协议,而是基于 WebSocket 再包装的消息通信协议。websockets/ws:9k star强大易用的 we
格式:\033[背景色编号;字色编号m
颜色属性:字色编号:30黑,31红,32绿,33黄,34蓝,35紫,36深绿,37白色背景编号:40黑,41红,42绿,43黄,44蓝,45紫,46深绿,47白色例子:console.log('\033[42;30m Error \033[40;32m 出错了 \033[0m');
用绿底(42)黑字(30)显示“Error”,然后使用黑底(40)绿字(32)显示余下的信息,最后关闭所有属性(\033[0m)其他标记:\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
所有标签