使用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",就是发送请求

相关推荐
会飞的鱼先生1 分钟前
Node.js-http模块
网络协议·http·node.js
lzb_kkk3 分钟前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
好开心啊没烦恼23 分钟前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
简佐义的博客1 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
Liudef061 小时前
2048小游戏实现
javascript·css·css3
程序员爱钓鱼1 小时前
【无标题】Go语言中的反射机制 — 元编程技巧与注意事项
开发语言·qt
Frank学习路上1 小时前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
2301_805054562 小时前
Python训练营打卡Day59(2025.7.3)
开发语言·python
lsx2024062 小时前
CSS 网页布局:从基础到进阶
开发语言