2024-08-13

Node.js 是一个开源和跨平台的 JavaScript 运行时环境。它在后端服务器运行,能够在不需要浏览器的情况下运行。以下是 50 个 Node.js 命令的快速参考:

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



npm init
  1. 安装一个 Node.js 包:



npm install <package_name>
  1. 全局安装一个 Node.js 包:



npm install -g <package_name>
  1. 安装开发依赖项:



npm install --save-dev <package_name>
  1. 运行 Node.js 文件:



node <file_name.js>
  1. 检查 Node.js 版本:



node --version
  1. 列出所有全局安装的 Node.js 包:



npm list -g --depth 0
  1. 更新一个 Node.js 包:



npm update <package_name>
  1. 全局更新 Node.js 包:



npm update -g <package_name>
  1. 卸载一个 Node.js 包:



npm uninstall <package_name>
  1. 列出所有已安装的 Node.js 包:



npm list
  1. 创建一个 Node.js 服务器:



const http = require('http');
 
const hostname = '127.0.0.1';
const port = 3000;
 
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});
 
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
  1. 使用 Node.js 读取文件:



const fs = require('fs');
 
fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});
  1. 使用 Node.js 写入文件:



const fs = require('fs');
 
fs.writeFile('example.txt', 'Hello World!', (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});
  1. 使用 Node.js 的 os 模块获取系统信息:



const os = require('os');
 
console.log('Hostname: ' + os.hostname());
console.log('Platform: ' + os.platform());
console.log('Arch: ' + os.arch());
  1. 使用 Node.js 创建一个简单的 TCP 服务器:



const net = require('net');
 
const server = net.createServer((socket) => {
  console.log('A client connected');
  
  socket.on('data', (data) => {
    console.log(data.toString());
    socket.end('Hello Client');
  });
  
  socket.on('close', () => {
    console.log('A client disconnected');
  });
});
 
server.listen(8080, () =>
2024-08-13



// 引入必要的模块
const cluster = require('cluster');
const os = require('os');
 
// 判断是否在集群模式下运行
if (cluster.isMaster) {
  // 获取CPU核心数
  const numCPUs = os.cpus().length;
 
  // 创建工作进程数等于CPU核心数
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
 
  // 监听退出信号,并重启工作进程
  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died. Restarting...`);
    cluster.fork();
  });
 
// 在工作进程中运行你的应用逻辑
} else {
  // 引入你的应用模块
  const app = require('./app.js');
 
  // 启动你的应用
  app.start();
}

这个示例代码展示了如何在Node.js中使用集群模式来避免单一进程内存溢出问题。当主进程检测到工作进程退出时,它会重新创建新的工作进程。这种方式可以有效分散负载并增加系统的健壮性。在工作进程中,你需要引入并启动你的应用程序。这是一个简单的方法来保证你的Node.js应用可以在面临内存压力时自动恢复。

2024-08-13



// 假设我们已经知道了Node.js版本与npm版本不兼容的问题,并需要升级或降级其中一个。
 
// 解决方案1:升级Node.js到兼容的最新版本
// 先更新npm到最新版本
npm install -g npm@latest
// 然后通过n模块升级Node.js到兼容的最新版本
n latest
 
// 解决方案2:降级npm到与当前Node.js版本兼容的版本
// 先查看兼容的npm版本
npm view npm versions
// 选择一个兼容的版本,例如6.14.8
npm install -g npm@6.14.8
 
// 解决方案3:如果n模块不适用,可以直接下载对应版本的Node.js安装包进行升级或降级
// 从Node.js官网下载对应版本的安装包,然后安装
 
// 注意:在操作前,请备份重要数据,避免数据丢失。

在这个例子中,我们提供了三种解决Node.js版本与npm版本不兼容的方法。第一种方法是通过n模块升级Node.js到与npm兼容的最新版本。第二种方法是通过查看npm仓库来选择一个与当前Node.js版本兼容的版本,然后进行降级。第三种方法是直接从Node.js官网下载并安装指定版本的Node.js。在操作前,请确保已经备份了重要数据。

2024-08-13



import express from 'express';
import jwt from 'express-jwt';
import jwksRsa from 'jwks-rsa';
 
// 创建Express应用
const app = express();
 
// 配置JWT中间件
const checkJwt = jwt({
  secret: jwksRsa.expressJwtSecret({
    cache: true,
    rateLimit: true,
    jwksRequestsPerMinute: '5',
    jwksUri: 'https://your-auth0-domain.eu.auth0.com/.well-known/jwks.json',
  }),
  audience: 'Your_API_Identifier',
  issuer: 'https://your-auth0-domain.eu.auth0.com/',
  algorithm: 'RS256',
});
 
// 保护路由
app.get('/api/protected', checkJwt, (req, res) => {
  res.send('Hello World!');
});
 
// 启动服务器
app.listen(3001, () => {
  console.log('Server listening on port 3001');
});

这段代码演示了如何在Express应用中使用express-jwtjwks-rsa来保护一个API端点,只允许使用正确的JWT访问。在实际应用中,你需要替换Your_API_Identifieryour-auth0-domain.eu.auth0.com/为你的Auth0配置信息。

2024-08-13

确保Node.js在不同操作系统上的卸载干净,可以通过以下方法:

  1. Windows系统:

    • 使用“添加或删除程序”功能进行卸载。
    • 清理残留文件(如果有):

      
      
      
      del /f /s /q %programdata%\npm\
      del /f /s /q %programdata%\npm-cache\
      del /f /s /q %userprofile%\AppData\Roaming\npm\
      del /f /s /q %userprofile%\AppData\Roaming\npm-cache\
  2. macOS系统:

    • 使用brew(如果安装时使用了brew):

      
      
      
      brew uninstall node
    • 手动删除Node.js相关目录:

      
      
      
      sudo rm -rf /usr/local/bin/node
      sudo rm -rf /usr/local/lib/node_modules/
      sudo rm -rf /usr/local/include/node/
    • 清理npm缓存:

      
      
      
      sudo npm cache clean -f
  3. Linux系统:

    • 使用包管理器(如apt-getyum):

      
      
      
      sudo apt-get remove --purge nodejs

      
      
      
      sudo yum remove nodejs
    • 手动删除Node.js和npm目录:

      
      
      
      sudo rm -rf /usr/local/bin/node
      sudo rm -rf /usr/local/lib/node_modules/
    • 清理npm缓存:

      
      
      
      sudo npm cache clean -f

在执行以上操作时,请确保你有适当的权限,如果需要,使用sudo来获取管理员权限。如果你使用了版本管理工具如nvmn,可以使用它们提供的命令来管理Node.js的版本和卸载操作。

2024-08-13



# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
 
# 或者使用wget
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
 
# 重新加载shell配置
source ~/.bashrc
 
# 或者重新打开一个新的终端
 
# 安装特定版本的Node.js
nvm install 14.17.0
 
# 切换到目标Node.js版本
nvm use 14.17.0
 
# 安装Angular CLI
npm install -g @angular/cli
 
# 创建新的Angular项目
ng new my-project
 
# 进入项目目录
cd my-project
 
# 启动Angular项目
ng serve --open

这段代码展示了如何使用NVM来安装并切换不同版本的Node.js,然后使用npm全局安装Angular CLI并创建一个新的Angular项目,最后通过Angular CLI的ng serve命令启动项目并打开浏览器。这样,开发者可以在不同的项目或不同的开发环境间轻松切换,保持环境一致性。

2024-08-13

tinyws是一个轻量级的Node.js WebSocket中间件库,它提供了简单易用的接口来处理WebSocket连接。以下是如何使用tinyws的一个基本示例:

首先,你需要安装tinyws库:




npm install tinyws

然后,你可以在你的Node.js应用程序中使用它来处理WebSocket连接:




const http = require('http');
const TinyWS = require('tinyws');
 
// 创建一个简单的HTTP服务器
const server = http.createServer((req, res) => {
  res.end('WebSocket server is running.');
});
 
// 初始化TinyWS实例
const wss = new TinyWS(server);
 
// 监听WebSocket连接的打开事件
wss.on('connection', (ws) => {
  console.log('WebSocket connection established.');
 
  // 监听客户端发送的消息
  ws.on('message', (message) => {
    console.log('Received message:', message);
 
    // 将接收到的消息发送回客户端
    ws.send(message);
  });
 
  // 监听WebSocket连接的关闭事件
  ws.on('close', () => {
    console.log('WebSocket connection closed.');
  });
});
 
// 启动HTTP服务器监听端口
server.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

在这个示例中,我们创建了一个简单的HTTP服务器,并使用TinyWS来处理WebSocket请求。每当有客户端连接到服务器时,我们就打印一条消息并监听客户端发送的消息。当接收到消息时,我们将其发送回客户端作为响应。同时,我们还监听连接的关闭事件。这个示例提供了一个基本的WebSocket服务器的框架。

2024-08-13

在Node.js环境中,您可以使用http-server这个轻量级的静态文件服务器。以下是如何使用它的步骤:

  1. 首先,您需要全局安装http-server。在命令行中运行以下命令:



npm install -g http-server
  1. 然后,导航到您的HTML文件所在的目录,并在该目录中启动服务器。



http-server

默认情况下,服务器将在8080端口启动。您可以通过浏览器访问http://localhost:8080来查看您的HTML文件。

如果您的HTML文件名为index.html,当您通过浏览器访问http-server运行的地址时,默认会打开index.html文件。

如果您需要更改服务器的端口,可以使用-p选项:




http-server -p 9090

这将在端口9090上启动服务器。

以上步骤将在您的本地机器上启动一个简单的Web服务器,您可以通过HTTP协议访问您的HTML文件。

2024-08-13

Sequelize是一个强大的Node.js ORM(对象关系映射)库,它允许你使用Node.js编写代码来操作数据库。以下是一个使用Sequelize创建和定义模型的例子:




const { Sequelize, DataTypes } = require('sequelize');
 
// 初始化连接(使用你的数据库信息替换下面的参数)
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql' // 根据你使用的数据库类型,这里可能是 'mysql'、'mariadb'、'postgres'、'mssql' 或 'sqlite' 之一
});
 
// 定义一个模型
const User = sequelize.define('User', {
  // 模型属性及其类型
  name: DataTypes.TEXT,
  favoriteColor: {
    type: DataTypes.TEXT,
    defaultValue: 'green'
  },
  age: DataTypes.INTEGER,
  cash: DataTypes.INTEGER
}, {
  // 其他模型选项
  timestamps: false
});
 
// 同步模型到数据库
async function syncModels() {
  try {
    await sequelize.sync({ force: true }); // 注意:force: true 将会删除并重新创建表
    console.log('Models were synchronized');
  } catch (error) {
    console.error('An error occurred while synchronizing the models:', error);
  }
}
 
// 调用同步函数
syncModels();

在这个例子中,我们首先导入了SequelizeDataTypes,然后初始化了一个连接到数据库的Sequelize实例。接着,我们定义了一个名为User的模型,并指定了它的属性和类型。最后,我们调用了sequelize.sync方法来同步模型到数据库,force: true选项用于确保在同步时删除并重新创建表,这在开发过程中很有用,但请小心使用,因为它会导致数据丢失。

2024-08-13



const fs = require('fs').promises;
const path = require('path');
 
async function listFilesInDirectory(directory) {
  let files = [];
  try {
    const entries = await fs.readdir(directory, { withFileTypes: true });
    for (let entry of entries) {
      const fullPath = path.join(directory, entry.name);
      if (entry.isDirectory()) {
        files = [...files, ...(await listFilesInDirectory(fullPath))];
      } else {
        files.push(fullPath);
      }
    }
  } catch (error) {
    console.error(error);
  }
  return files;
}
 
// 使用示例
const directoryPath = '/path/to/directory'; // 替换为你要遍历的目录路径
listFilesInDirectory(directoryPath).then(files => {
  console.log(files); // 打印出目录下的所有文件路径
});

这段代码使用了Node.js的fs.promises API,这是异步文件系统操作的推荐方式。它递归遍历了给定的目录,并返回了一个包含所有文件路径的数组。使用withFileTypes选项可以直接获取目录中的文件和子目录的fs.Dirent对象,然后通过检查entry.isDirectory()来判断是否为目录,进而进行递归遍历。