Node.js第一课:实现简易的命令行任务管理器

Node.js简介

  • Node.js不是语言,是JavaScript的运行环境
  • 基于Chrome V8引擎,使JS可以脱离浏览器运行
  • 异步非阻塞I/O模型,适合高并发场景
  • 应用场景:Web服务、API开发、CLI工具、微服务等

第一个Node程序

创建项目结构

go 复制代码
task-manager/
├── package.json
├── index.js
└── tasks.json  运行index.js后自动生成

package.json 配置

json 复制代码
{
  "name": "task-manager",
  "version": "1.0.0",
  "description": "命令行任务管理器",
  "main": "index.js",
  "bin": {
    "task": "./index.js"
  },
  "scripts": {
    "start": "node index.js"
  }
}

index.js 内容

javascript 复制代码
#!/usr/bin/env node

const fs = require('fs');
const path = require('path');

// 任务文件路径
const TASK_FILE = path.join(__dirname, 'tasks.json');

// 初始化任务文件
function initTasks() {
  if (!fs.existsSync(TASK_FILE)) {
    fs.writeFileSync(TASK_FILE, JSON.stringify([], null, 2));
  }
}

// 读取任务
function loadTasks() {
  try {
    const data = fs.readFileSync(TASK_FILE, 'utf8');
    return JSON.parse(data);
  } catch (error) {
    return [];
  }
}

// 保存任务
function saveTasks(tasks) {
  fs.writeFileSync(TASK_FILE, JSON.stringify(tasks, null, 2));
}

// 添加任务
function addTask(description) {
  const tasks = loadTasks();
  const newTask = {
    id: Date.now(),
    description,
    completed: false,
    createdAt: new Date().toISOString()
  };
  tasks.push(newTask);
  saveTasks(tasks);
  console.log(`✅ 任务添加成功: ${description}`);
}

// 列出任务
function listTasks() {
  const tasks = loadTasks();
  
  if (tasks.length === 0) {
    console.log("📝 还没有任务,快添加一个吧!");
    return;
  }
  
  console.log("\n📋 你的任务列表:");
  tasks.forEach((task, index) => {
    const status = task.completed ? '✅' : '⏳';
    console.log(`${index + 1}. ${status} ${task.description}`);
  });
}

// 完成任务
function completeTask(index) {
  const tasks = loadTasks();
  if (index >= 0 && index < tasks.length) {
    tasks[index].completed = true;
    saveTasks(tasks);
    console.log(`🎉 任务完成: ${tasks[index].description}`);
  } else {
    console.log("❌ 任务不存在");
  }
}

// 删除任务
function deleteTask(index) {
  const tasks = loadTasks();
  if (index >= 0 && index < tasks.length) {
    const deleted = tasks.splice(index, 1)[0];
    saveTasks(tasks);
    console.log(`🗑️ 任务删除: ${deleted.description}`);
  } else {
    console.log("❌ 任务不存在");
  }
}

// 主函数
function main() {
  initTasks();
  
  const [,, command, ...args] = process.argv;
  
  switch (command) {
    case 'add':
      if (args.length > 0) {
        addTask(args.join(' '));
      } else {
        console.log("❌ 请提供任务描述");
      }
      break;
      
    case 'list':
      listTasks();
      break;
      
    case 'done':
      if (args.length > 0) {
        completeTask(parseInt(args[0]) - 1);
      } else {
        console.log("❌ 请提供任务编号");
      }
      break;
      
    case 'delete':
      if (args.length > 0) {
        deleteTask(parseInt(args[0]) - 1);
      } else {
        console.log("❌ 请提供任务编号");
      }
      break;
      
    default:
      console.log(`
        使用说明:
          node index.js add <任务描述>  添加任务
          node index.js list           列出所有任务
          node index.js done <序号>    标记任务为完成
          node index.js delete <序号>  删除任务
      `);
  }
}

main();

运行与测试

bash 复制代码
# 添加任务
node index.js add "学习Node.js"
node index.js add "完成第一个项目"

# 查看任务
node index.js list

# 完成任务
node index.js done 1

# 删除任务
node index.js delete 2

知识点总结

  • CommonJS模块系统 :使用 require导入模块

  • 核心模块fs(文件系统)、path(路径处理)

  • 全局对象process获取进程信息

  • JSON操作:读写JSON文件

  • 命令行参数process.argv处理用户输入

相关推荐
萌萌哒草头将军2 小时前
Node.js 存在多个严重安全漏洞!官方建议尽快升级🚀🚀🚀
vue.js·react.js·node.js
这个图像胖嘟嘟2 小时前
前端开发的基本运行环境配置
开发语言·javascript·vue.js·react.js·typescript·npm·node.js
前端付豪6 小时前
必知Node应用性能提升及API test 接口测试
前端·react.js·node.js
王同学 学出来6 小时前
vue+nodejs项目在服务器实现docker部署
服务器·前端·vue.js·docker·node.js
源猿人6 小时前
使用 Node.js 批量下载全国行政区 GeoJSON(含省级 + 地级市)
node.js
_Kayo_9 小时前
Node.JS 学习笔记7
笔记·学习·node.js
程序员爱钓鱼11 小时前
Node.js 编程实战:博客系统 —— 用户注册登录与文章管理
前端·后端·node.js
JaredYe11 小时前
用 Node.js 从旧版 PPT 中提取文本:轻量开源工具 ppt-to-text
node.js·powerpoint·ppt
TDengine (老段)12 小时前
TDengine Node.js 语言连接器入门指南
大数据·开发语言·物联网·node.js·vim·时序数据库·tdengine
余道各努力,千里自同风12 小时前
node.js 操作 MongoDB
数据库·mongodb·node.js