使用Nodejs尝试小程序后端服务编写:简单的待办事项管理demo

文章目录

结构

尝试写一个简单的待办事项(Todo)管理的NodeJs后端服务,文件架构如下:

js 复制代码
zyxTest/
├── server.js       # 主程序
├── package.json    # 项目配置
└── .gitignore      # 忽略文件

demo步骤

  1. 初始化项目并安装依赖:

    express框架似乎是nodejs写小程序的常用框架,我们先用express进行尝试

bash 复制代码
npm init -y 
#需要首先在windows powershell里面运行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser不然会弹出vscode禁止运行脚本
npm install express
  1. 创建 server.js
js 复制代码
const express = require('express');
const app = express();
app.use(express.json());

// 模拟数据库(内存存储)
let todos = [];
let idCounter = 1;

// 获取所有待办事项
app.get('/todos', (req, res) => {
  res.json(todos);
});

// 添加新待办事项
app.post('/todos', (req, res) => {
  const { title } = req.body;
  if (!title) {
    return res.status(400).json({ error: 'Title is required' });
  }
  const newTodo = { id: idCounter++, title, completed: false };
  todos.push(newTodo);
  res.status(201).json(newTodo);
});

// 删除待办事项
app.delete('/todos/:id', (req, res) => {
  const id = parseInt(req.params.id);
  todos = todos.filter(todo => todo.id !== id);
  res.sendStatus(204);
});

// 切换完成状态
app.patch('/todos/:id/toggle', (req, res) => {
  const id = parseInt(req.params.id);
  const todo = todos.find(t => t.id === id);
  if (todo) {
    todo.completed = !todo.completed;
    res.json(todo);
  } else {
    res.status(404).json({ error: 'Todo not found' });
  }
});

// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}`);
});
  1. vscode终端启动服务器:

    node server.js

demo运行效果

此时vscode终端会给出访问链接:

点击链接可以看到前端状态,此处采用了最简单的写法

API测试

我们最初采用curl进行api测试,但win里面的curl不太好用(详情见bug解决第三条)改用vscode的RestClient插件进行api测试。

这个插件能帮助我们发送写好的http请求,效果类似postman

插件效果如下,红框内部是模拟请求发送按钮。

(1) 添加待办事项

curl方法:

bash 复制代码
curl -X POST http://localhost:3000/todos \
  -H "Content-Type: application/json" \
  -d '{"title": "Buy milk"}'

使用插件编写test.http方法:

http 复制代码
POST http://localhost:3000/todos
Content-Type: application/json

{
  "title": "使用 REST Client 测试"
}

获取到响应,测试成功

(2) 获取所有待办事项
bash 复制代码
curl http://localhost:3000/todos
http 复制代码
### 获取待办事项
GET http://localhost:3000/todos

响应如下,测试成功:

(3) 切换完成状态
bash 复制代码
curl -X PATCH http://localhost:3000/todos/1/toggle
http 复制代码
PATCH http://localhost:3000/todos/1/toggle

响应如下,测试成功:

(4) 删除待办事项
bash 复制代码
curl -X DELETE http://localhost:3000/todos/1
http 复制代码
###  删除待办事项 (DELETE)
DELETE http://localhost:3000/todos/1

也可以通过@name add_todo,使用 # @name 请求名称 语法为请求命名,后续引用响应,可以切换单独某个请求的完成状态:

http 复制代码
### 1. 添加新待办事项并命名请求
# @name add_todo
POST http://localhost:3000/todos
Content-Type: application/json

{
  "title": "使用变量示例的任务"
}

### 2. 从响应中提取ID并赋值给变量
@todoId = {{add_todo.response.body.id}}

### 3. 切换完成状态(使用变量)
PATCH http://localhost:3000/todos/{{todoId}}/toggle

### 4. 删除待办事项(使用同一个变量)
DELETE http://localhost:3000/todos/{{todoId}}

API测试-RESTClient一些其他的高级功能

环境变量管理不同环境配置
http 复制代码
### 设置变量
@dev = http://localhost:3000
@prod = https://api.yourserver.com

### 使用变量
GET {{dev}}/todos
授权认证 测试需要登录的接口
http 复制代码
POST http://localhost:3000/login
Content-Type: application/json

{
  "username": "admin",
  "password": "123456"
}

### 获取token后使用
@token = {{login.response.body.token}}
GET http://localhost:3000/profile
Authorization: Bearer {{token}}
保存响应
http 复制代码
GET http://localhost:3000/todos
>> response.json
测试脚本编写自动化测试
http 复制代码
GET http://localhost:3000/todos

> {%
  client.test("Status OK", function() {
     client.assert(response.status === 200);
  });
  client.test("Has items", function() {
     client.assert(response.body.length > 0);
  });
%}

bug解决

  1. 端口占用

    bash 复制代码
    # 查找占用3000端口的进程
    netstat -ano | findstr :3000  #mac似乎是lsof -i :3000
    
    # 终止进程
    taskkill /PID <PID> /F  #mac是kill -9
  2. 依赖安装失败

    尝试清除缓存

    bash 复制代码
    npm cache clean --force
    rm -rf node_modules package-lock.json
    npm install
  3. windows的curl问题:

    在 Windows PowerShell 中,curl 命令实际上是 Invoke-WebRequest cmdlet 的别名,所以我们在win下直接用curl会报错:

win下可以直接使用 PowerShell 原生命令进行测试:

bash 复制代码
Invoke-RestMethod -Uri http://localhost:3000/todos `
  -Method POST `
  -Headers @{"Content-Type"="application/json"} `
  -Body '{"title":"新任务"}'

但是还是比较建议在 VSCode 中用 REST Client 扩展,更加方便

  1. 创建 test.http 文件
  2. 添加内容:
http 复制代码
### 添加待办事项
POST http://localhost:3000/todos
Content-Type: application/json

{
  "title": "使用 REST Client 测试"
}

### 获取待办事项
GET http://localhost:3000/todos

再点击每个请求上方的 "Send Request",就是发送请求

相关推荐
Kagol7 分钟前
JavaScript 中的 sort 排序问题
前端·javascript
天“码”行空22 分钟前
java面向对象的三大特性之一多态
java·开发语言·jvm
cos1 小时前
Fork 主题如何更新?基于 Ink 构建主题更新 CLI 工具
前端·javascript·git
odoo中国1 小时前
Odoo 19 模块结构概述
开发语言·python·module·odoo·核心组件·py文件按
代码N年归来仍是新手村成员2 小时前
【Java转Go】即时通信系统代码分析(一)基础Server 构建
java·开发语言·golang
Z1Jxxx3 小时前
01序列01序列
开发语言·c++·算法
摸鱼的春哥3 小时前
AI编排实战:用 n8n + DeepSeek + Groq 打造全自动视频洗稿流水线
前端·javascript·后端
沐知全栈开发3 小时前
C语言中的强制类型转换
开发语言
关于不上作者榜就原神启动那件事3 小时前
Java中大量数据Excel导入导出的实现方案
java·开发语言·excel
坚定学代码3 小时前
基于观察者模式的ISO C++信号槽实现
开发语言·c++·观察者模式·ai