2024-08-09

Node.js 的常用内置库非常广泛,但是如果我们仅仅讨论常见的、核心的库,那么主要可以分为以下几类:

  1. 文件系统(File System)
  2. 模块系统(Modules)
  3. 网络(HTTP, HTTPS, TCP, DNS)
  4. 流(Stream)
  5. 加密(Crypto)
  6. 调试(Debugger, Console)
  7. 进程(Process)
  8. 文本解析(JSON, XML, CSV)
  9. 错误处理(Error Handling)
  10. 事件(Events)
  11. 缓冲区(Buffer)
  12. 路径(Path)
  13. 查询字符串(Query String)
  14. 时间(Timeouts, Timers)
  15. zlib(Compression)
  16. 加载器(Module Loader)

这里我将为每一类提供一个简单的示例代码。

  1. 文件系统(File System)



const fs = require('fs');
 
fs.readFile('example.txt', (err, data) => {
  if (err) throw err;
  console.log(data);
});
  1. 模块系统(Modules)



// math.js
exports.add = function(a, b) {
  return a + b;
};
 
// main.js
const math = require('./math.js');
console.log(math.add(1, 1)); // 2
  1. 网络(HTTP, HTTPS, TCP, DNS)



const http = require('http');
 
http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3000, () => {
  console.log('Server running at http://127.0.0.1:3000/');
});
  1. 流(Stream)



const fs = require('fs');
 
const readableStream = fs.createReadStream('example.txt');
const writableStream = fs.createWriteStream('example_copy.txt');
 
readableStream.pipe(writableStream);
  1. 加密(Crypto)



const crypto = require('crypto');
 
const hash = crypto.createHash('sha256');
 
hash.update('Hello World');
console.log(hash.digest('hex')); // e794657labs870ad936da363394f5ca329dn31ff1d71390bd7a35ddb69f4
  1. 调试(Debugger, Console)



const console = require('console');
 
const myConsole = new console.Console(process.stdout, process.stderr);
 
myConsole.log('Hello World!');
  1. 进程(Process)



const process = require('process');
 
process.on('exit', () => {
  console.log('Bye!');
});
  1. 文本解析(JSON, XML, CSV)



const JSON = require('json');
 
const obj = { name: 'John', age: 31, city: 'New York' };
const myJSON = JSON.stringify(obj);
console.log(myJSON);
  1. 错误处理(Error Handling)



const fs = require('fs');
 
fs.readFile('example.txt', (err, data) => {
2024-08-09

链码(Smart Contract)开发基础是一个很宽泛的概念,因为它涉及到区块链技术的许多不同方面。在这个上下文中,我们通常指的是使用Node.js进行区块链智能合约的开发,如使用Hyperledger Fabric的链码。

以下是一个简单的Hyperledger Fabric链码示例,它展示了如何使用Node.js和ES6语法编写一个简单的链码,该链码会记录一个账户的余额。




'use strict';
 
const { Contract } = require('fabric-contract-api');
 
class MyContract extends Contract {
 
    async initLedger(ctx) {
        const ledger = {};
        await ctx.stub.putState('Account1', Buffer.from(JSON.stringify(ledger)));
    }
 
    async queryAccount(ctx, accountId) {
        const ledger = await ctx.stub.getState(accountId);
        return ledger.toString();
    }
 
    async updateAccount(ctx, accountId, newBalance) {
        const ledger = await ctx.stub.getState(accountId);
        ledger.balance = parseInt(newBalance);
        await ctx.stub.putState(accountId, Buffer.from(JSON.stringify(ledger)));
    }
}
 
module.exports = MyContract;

在这个例子中,我们定义了一个MyContract类,它有三个方法:initLedger用于初始化账本,queryAccount用于查询账户余额,updateAccount用于更新账户余额。这个链码是基于Hyperledger Fabric框架的,它使用Fabric提供的fabric-contract-api库。

这只是链码开发的一个非常基础的例子,实际的项目会更加复杂,可能会涉及到更多的逻辑和安全考虑。

2024-08-09



const axios = require('axios');
const mysql = require('mysql');
 
// 连接到MySQL数据库
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'your_password',
  database: 'wallhaven'
});
 
connection.connect();
 
// 定义一个函数来将数据插入到MySQL数据库
function insertIntoDatabase(data) {
  const query = 'INSERT INTO wallpapers (id, url, short_url, views, favorites, category, dimension_x, dimension_y, resolution, file_size, uploaded_at, description) VALUES ?';
  connection.query(query, [data], function (error, results, fields) {
    if (error) throw error;
    // 可以在这里添加日志记录或其他逻辑
    console.log('数据插入成功');
  });
}
 
// 发送API请求并处理数据
axios.get('https://wallhaven.cc/api/v1/search?q=anime&sorting=random&page=1')
  .then(response => {
    const wallpapers = response.data.data;
    const dataForDatabase = wallpapers.map(wallpaper => [
      wallpaper.id,
      wallpaper.path,
      wallpaper.short_url,
      wallpaper.views,
      wallpaper.favorites,
      wallpaper.category,
      wallpaper.dimension_x,
      wallpaper.dimension_y,
      wallpaper.resolution,
      wallpaper.file_size,
      wallpaper.uploaded_at,
      wallpaper.description
    ]);
    // 插入数据到数据库
    insertIntoDatabase(dataForDatabase);
  })
  .catch(error => {
    console.error('Error fetching data: ', error);
  });
 
// 记得关闭数据库连接
connection.end();

这段代码示例修复了原代码中的问题,并添加了数据库连接的关闭操作。它展示了如何使用Node.js和MySQL模块来处理API响应并将数据存储到数据库中。

2024-08-09

在Node.js中,有一些常用的命令,这些命令可以帮助我们初始化新项目,安装依赖,运行代码等等。以下是一些常用的Node.js命令:

  1. 创建新的Node.js项目:



npm init

这个命令会引导你创建一个新的Node.js项目,它会询问你一系列问题,如项目名称、版本、描述、入口点、测试命令、git仓库、关键字等。完成后,它会在当前目录生成一个package.json文件。

  1. 安装依赖:



npm install <package_name>

这个命令会将指定的包下载并安装到当前项目中。它会将包添加到node_modules目录,并且会在package.jsondependencies部分添加该包。

  1. 全局安装包:



npm install -g <package_name>

这个命令会将指定的包下载并安装为全局包。

  1. 卸载依赖:



npm uninstall <package_name>

这个命令会从当前项目中移除指定的包,并且会从package.jsondependencies部分移除该包。

  1. 更新依赖:



npm update <package_name>

这个命令会更新指定的包到最新版本,并且会更新package.json中的版本号。

  1. 运行Node.js代码:



node <file_name.js>

这个命令会运行指定的Node.js文件。

  1. 运行开发依赖的脚本:



npm run <script_name>

这个命令会运行在package.jsonscripts部分定义的脚本。

  1. 列出已安装的全局包:



npm list -g --depth 0

这个命令会列出所有全局安装的包,--depth 0参数确保只列出顶层包,不包括它们的依赖。

  1. 列出项目的依赖:



npm list

这个命令会列出当前项目所有安装的依赖。

  1. 清除缓存:



npm cache clean --force

这个命令会清除npm缓存,有时候可以解决安装问题。

这些命令是Node.js开发中最常用的。每个命令都有其特定的用途,熟练掌握这些命令将会极大地提升你的开发效率。

2024-08-09



# 安装Electron模块
npm install electron --save-dev
 
# 初始化Electron应用
./node_modules/.bin/electron --init
 
# 运行Electron应用
./node_modules/.bin/electron .

以上是一个简单的示例,展示了如何在已有的Node.js项目中安装和初始化Electron,并运行第一个桌面应用。这里使用了./node_modules/.bin/electron来直接调用项目中安装的Electron二进制文件,而不是全局安装的Electron。这样做可以确保使用与项目相关的依赖版本,避免可能的版本冲突。

2024-08-09

在Windows 10上卸载、安装和配置Node.js的步骤如下:

卸载Node.js

  1. 打开“控制面板” -> “程序” -> “程序和功能”。
  2. 在列表中找到Node.js,然后点击它。
  3. 点击“卸载”。

安装Node.js

  1. 访问Node.js官方网站(https://nodejs.org/)下载最新版的Windows安装包。
  2. 运行安装包,按照提示完成安装。

配置Node.js

安装完成后,您可能还需要配置npm的全局模块和缓存位置,以及更新Node.js到最新版本。

  1. 打开命令提示符或PowerShell。
  2. 运行以下命令以更新npm到最新版本:



npm install -g npm@latest
  1. 如果需要配置模块和缓存位置,可以使用以下命令:



npm config set prefix /path/to/global/modules
npm config set cache /path/to/global/npm-cache

替换/path/to/global/modules/path/to/global/npm-cache为您希望设置的实际路径。

  1. 要检查Node.js和npm的版本,可以使用以下命令:



node -v
npm -v

这些步骤提供了Node.js在Windows 10上的基本卸载、安装和配置过程。

2024-08-09

在Node.js中,可以使用crypto模块来进行加密操作。以下是一个使用crypto模块的AES-256-CBC算法进行加密的例子:




const crypto = require('crypto');
 
// 加密函数
function encrypt(text, secretKey) {
  const iv = crypto.randomBytes(16); // 初始化向量
  const cipher = crypto.createCipheriv('aes-256-cbc', crypto.createHash('sha256').update(secretKey).digest(), iv);
  let encrypted = cipher.update(text);
  encrypted = Buffer.concat([encrypted, cipher.final()]);
  return iv.toString('hex') + ':' + encrypted.toString('hex');
}
 
// 解密函数
function decrypt(text, secretKey) {
  let textParts = text.split(':');
  let iv = Buffer.from(textParts.shift(), 'hex');
  let encryptedText = Buffer.from(textParts.join(':'), 'hex');
  let decipher = crypto.createDecipheriv('aes-256-cbc', crypto.createHash('sha256').update(secretKey).digest(), iv);
  let decrypted = decipher.update(encryptedText);
  decrypted = Buffer.concat([decrypted, decipher.final()]);
  return decrypted.toString();
}
 
// 使用示例
const secretKey = 'your-256-bit-secret-key'; // 256位密钥
const originalText = 'Hello World!';
 
const encryptedText = encrypt(originalText, secretKey);
console.log('Encrypted Text:', encryptedText);
 
const decryptedText = decrypt(encryptedText, secretKey);
console.log('Decrypted Text:', decryptedText);

在这个例子中,encrypt函数使用SHA256哈希值作为密钥,并生成一个随机的初始化向量(IV)。然后,它创建一个Cipher实例,并用密钥和IV对文本进行加密。解密过程中,先将加密文本分割为IV和加密文本,然后使用相同的密钥和IV进行解密。

请确保你的密钥是安全的,并且不要在不安全的环境中暴露。

2024-08-09



#!/bin/bash
# 安装Node.js和npm的脚本
 
# 定义Node.js和npm的版本
NODE_VERSION=v14.17.0
NPM_VERSION=6
 
# 移除旧版本的Node.js和npm
sudo apt-get purge -y nodejs npm
 
# 安装Node.js
sudo curl -sL https://deb.nodesource.com/setup_$NODE_VERSION | sudo -E bash -
sudo apt-get install -y nodejs
 
# 安装npm
sudo npm install -g npm@$NPM_VERSION
 
# 验证Node.js和npm的安装
node -v
npm -v

这段代码提供了一个简化版本的脚本,用于在Linux系统中安装特定版本的Node.js和npm。它首先移除系统中已有的Node.js和npm版本,然后通过NodeSource进行安装,并验证安装是否成功。这个过程可以确保系统中的Node.js和npm是最新的或特定版本,适用于生产环境。

2024-08-09

nvm ls-remote 命令用于列出可通过 nvm (Node Version Manager)安装的所有版本,包括 Node.js 和 IO.js。如果你只看到 IO.js 版本,并没有 Node.js 版本,可能是因为 Node.js 和 IO.js 合并后,它们的版本已经合并到一起了。从 Node.js 4.0.0 开始,Node.js 和 IO.js 合并,只有一个 Node.js 项目,两者的版本号会互相保留。

解决办法:

  1. 如果你需要安装 Node.js 的旧版本,可以直接使用 nvm install <version>,其中 <version> 是你想安装的 Node.js 或 IO.js 版本号。
  2. 如果你需要安装最新的 Node.js 版本,可以使用 nvm install nodenvm install stable,这会自动为你选择最合适的 Node.js 版本。

示例代码:




nvm install 4       # 安装 Node.js 4.x 的最后一个版本
nvm install 6       # 安装 Node.js 6.x 的最后一个版本
nvm install 8       # 安装 Node.js 8.x 的最后一个版本
nvm install node     # 安装最新的 Node.js 稳定版
nvm install iojs     # 安装最新的 IO.js 稳定版

请确保你的 nvm 是最新版本,以便获取最新的 Node.js 和 IO.js 版本信息。如果你的 nvm 版本过旧,可以使用 nvm upgrade 命令来更新 nvm

2024-08-09

是的,Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它使得 JavaScript 不仅可以运行在浏览器中,也可以运行在服务器端。通过 Node.js,开发者可以使用 JavaScript 语言完成后端逻辑的编写,这使得开发者能够以一种语言完成前后端的开发工作。

以下是一个简单的 Node.js 后端服务器示例,使用了 Express 框架:




const express = require('express');
const app = express();
const port = 3000;
 
app.get('/', (req, res) => {
  res.send('Hello World!');
});
 
app.listen(port, () => {
  console.log(`Server listening at http://localhost:${port}`);
});

在这个例子中,我们创建了一个简单的 HTTP 服务器,监听本地的 3000 端口。当访问根路径 '/' 时,服务器会返回 'Hello World!' 字符串。这个示例演示了 Node.js 的基本用法,并且展示了如何设置一个简单的 HTTP 服务器。