使用Nodejs嘗試小程序后端服務編寫:簡單的待辦事項管理demo

文章目錄

      • 結構
      • demo步驟
      • demo運行效果
      • API測試
        • (1) 添加待辦事項
        • (2) 獲取所有待辦事項
        • (3) 切換完成狀態
        • (4) 刪除待辦事項
      • API測試-RESTClient一些其他的高級功能
        • 環境變量管理不同環境配置
        • 授權認證 測試需要登錄的接口
        • 保存響應
        • 測試腳本編寫自動化測試
      • bug解決

結構

嘗試寫一個簡單的待辦事項(Todo)管理的NodeJs后端服務,文件架構如下:

zyxTest/
├── server.js       # 主程序
├── package.json    # 項目配置
└── .gitignore      # 忽略文件

在這里插入圖片描述

demo步驟

  1. 初始化項目并安裝依賴:

    express框架似乎是nodejs寫小程序的常用框架,我們先用express進行嘗試

npm init -y 
#需要首先在windows powershell里面運行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser不然會彈出vscode禁止運行腳本
npm install express
  1. 創建 server.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方法:

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

使用插件編寫test.http方法:

POST http://localhost:3000/todos
Content-Type: application/json{"title": "使用 REST Client 測試"
}

獲取到響應,測試成功

在這里插入圖片描述

(2) 獲取所有待辦事項
curl http://localhost:3000/todos
### 獲取待辦事項
GET http://localhost:3000/todos

響應如下,測試成功:

在這里插入圖片描述

(3) 切換完成狀態
curl -X PATCH http://localhost:3000/todos/1/toggle
PATCH http://localhost:3000/todos/1/toggle

響應如下,測試成功:

在這里插入圖片描述

(4) 刪除待辦事項
curl -X DELETE http://localhost:3000/todos/1
###  刪除待辦事項 (DELETE)
DELETE http://localhost:3000/todos/1

在這里插入圖片描述

也可以通過@name add_todo,使用 # @name 請求名稱 語法為請求命名,后續引用響應,可以切換單獨某個請求的完成狀態:

### 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一些其他的高級功能

環境變量管理不同環境配置
### 設置變量
@dev = http://localhost:3000
@prod = https://api.yourserver.com### 使用變量
GET {{dev}}/todos
授權認證 測試需要登錄的接口
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}}
保存響應
GET http://localhost:3000/todos
>> response.json
測試腳本編寫自動化測試
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. 端口占用

    # 查找占用3000端口的進程
    netstat -ano | findstr :3000  #mac似乎是lsof -i :3000# 終止進程
    taskkill /PID <PID> /F  #mac是kill -9
    
  2. 依賴安裝失敗

    嘗試清除緩存

    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 原生命令進行測試:

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

但是還是比較建議在 VSCode 中用 REST Client 擴展,更加方便

  1. 創建 test.http 文件
  2. 添加內容:
### 添加待辦事項
POST http://localhost:3000/todos
Content-Type: application/json{"title": "使用 REST Client 測試"
}### 獲取待辦事項
GET http://localhost:3000/todos

再點擊每個請求上方的 “Send Request”,就是發送請求

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87137.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS“多列布局”

多列布局是一種非常常見的布局方式&#xff0c;適用于內容豐富的頁面&#xff0c;如新聞網站、雜志或博客。 一、CSS多列布局概述 CSS多列布局允許我們將內容分成多個垂直列&#xff0c;使頁面布局更加靈活和多樣化。多列布局的主要屬性包括 ??column-count??、??col…

Pump上狙擊機制的功能優勢和實戰教學

加密世界的發展永遠伴隨著速度的革命。無論是新的 Token 上線&#xff0c;還是熱點項目的第一波流動性注入&#xff0c;搶先一步往往意味著利潤的幾何級增長。在這個講究「秒殺」與「先機」的賽道中&#xff0c;一項關鍵策略正悄然成為鏈上操作者的常規武器——狙擊&#xff08…

條件收斂的級數中項必須趨于 0,正負項抵消,但趨于 0 的速度不需要“足夠快”

條件收斂的級數中&#xff0c;項必須趨于 0&#xff0c;但趨于 0 的速度不需要“足夠快”的原因可以從以下幾個方面理解&#xff1a; 1. 收斂的必要條件&#xff1a;項趨于 0 對于任何收斂的級數&#xff08;無論是絕對收斂還是條件收斂&#xff09;&#xff0c;都必須滿足 li…

Tomcat 和 Spring MVC

Tomcat 和 Spring MVC 是 Java Web 開發中兩大核心組件&#xff0c;分別承擔不同的角色&#xff1a; 一、Tomcat 定義 Apache Tomcat 是一個開源的 Servlet 容器&#xff08;也稱為 Servlet 引擎&#xff09;&#xff0b; JSP 引擎&#xff0c;實現了 Java EE&#xff08;現稱 …

【微服務】134:SpringCloud

今天是劉小愛自學Java的第134天。 感謝你的觀看&#xff0c;謝謝你。 image 學習內容安排如下&#xff1a; SpringCloud的接觸。利用SpringCloud搭建微服務架構&#xff0c;當然這個估計要3天時間才能完成&#xff0c;今天主要是注冊中心Eureka的學習。 一、SpringCloud 微服務…

三次貝塞爾曲線,二次貝塞爾曲線有什么區別

三次貝塞爾曲線和二次貝塞爾曲線在控制點數量、數學表達式和曲線復雜度上有所不同。以下是它們的主要區別&#xff1a; 1. 控制點數量 二次貝塞爾曲線&#xff1a;由3 個點定義&#xff08;起點、終點和 1 個控制點&#xff09;。三次貝塞爾曲線&#xff1a;由4 個點定義&…

springboot集成dubbo

BeanDefinitionRegistryPostProcessor public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {/*** 允許開發者在Spring容器加載Bean定義(BeanDefinition)后&#xff0c;實例化Bean之前&#xff0c;動態修改或注冊新的BeanDefinition* 該接…

Seata 全面深入學習指南

Seata 全面深入學習指南 學習目錄 第一部分:Seata 基礎篇 分布式事務基礎概念Seata 概述與核心架構Seata 部署與快速入門第二部分:Seata 核心機制 Seata 事務模式詳解 AT 模式TCC 模式SAGA 模式XA 模式Seata 事務協調機制Seata 高可用設計第三部分:Seata 高級特性 Seata 配…

【Linux】基于策略模式的簡單日志設計

&#x1f4dd;前言&#xff1a; 這篇文章我們來講講Linux——基于策略模式的簡單日志設計 &#x1f3ac;個人簡介&#xff1a;努力學習ing &#x1f4cb;個人專欄&#xff1a;Linux &#x1f380;CSDN主頁 愚潤求學 &#x1f304;其他專欄&#xff1a;C學習筆記&#xff0c;C語…

C#引用傳遞代碼記錄

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 值傳遞和引用傳遞 {internal class Program{static void Main(string[] args){person P1new person();P1.name "張三";person P2 …

React動態渲染:如何用map循環渲染一個列表(List)

React動態渲染&#xff1a;如何用map循環渲染一個列表(List)&#xff1f; 系列回顧&#xff1a; 在上一篇中&#xff0c;我們學習了如何通過onClick等事件處理&#xff0c;讓React應用響應用戶的操作。現在我們的組件已經能“聽懂話”了。但是&#xff0c;目前為止我們展示的內…

React Native【實戰范例】水平滾動分類 FlatList

import React from "react"; import { FlatList, SafeAreaView, StyleSheet, Text, View } from "react-native"; interface itemType {id: string;title: string;icon: string; } // 水平滾動數據 const horizontalData: itemType[] [{ id: "1"…

iOS swiftUI的實用舉例

SwiftUI 是 Apple 推出的聲明式 UI 框架&#xff0c;以下是一些實用技巧和最佳實踐&#xff0c;可以幫助你更高效地開發 iOS/macOS/watchOS/tvOS 應用。 1. 布局技巧 靈活的空間占用 // 使用 Spacer 填充可用空間 HStack {Text("Left")Spacer() // 填充中間空間 …

SpringMVC異步處理Servlet

使用SpringMVC異步處理Servlet解決的問題 可以不阻塞有限的tomcat 線程&#xff08;默認是200~250個&#xff0c;springboot3是200個&#xff09;&#xff0c;確保網絡請求可以持續響應特定業務使用自定義線程池&#xff0c;可以處理的業務量更大對上層業務完全無感知&#xf…

同步與異步編程范式全景研究——從CPU時鐘周期到云原生架構的范式演進

第一章 時空觀的根本分歧 1.1 物理時間的約束性 同步操作的本質是對牛頓絕對時間的服從&#xff0c;其阻塞特性源于馮諾依曼體系下指令順序執行的基因。現代CPU的流水線技術&#xff08;如Intel Hyper-Threading&#xff09;通過指令級并行實現偽異步&#xff0c;但開發者仍需…

【零散技術】5分鐘完成Odoo18 登陸頁面全自定義

序言:時間是我們最寶貴的財富,珍惜手上的每個時分 從最初的tinyERP到Open ERP&#xff0c;再由OpenERP到Odoo&#xff0c;雖然UI已經過了多次大改&#xff0c;Odoo登錄界面依舊丑陋&#xff0c;同時還有各種Odoo版權信息&#xff0c;對于定制項目而言是不友好的。 今天以Odoo18…

Vue3 + TypeScript + Element Plus + el-pagination 分頁查詢實例分享

前端技術棧&#xff1a;Vue3 TypeScript Element Plus el-pagination 后端技術棧&#xff1a;Java Spring Boot Mybatis 應用異常情況說明&#xff1a;點擊頁碼2&#xff0c;會發送兩次請求&#xff0c;并且自動跳回頁碼1 代碼&#xff1a; Reagent.vue <script set…

LoadRunner 2023 安裝部署

下載地址&#xff1a;鏈接: https://caiyun.139.com/w/i/2nQQRYCZ1Ssjl 提取碼:3gz0 復制內容打開139-云盤 主要下載Micro_Focus_LoadRunner_2023_Community_Edition.exe來安裝就可以。 如要漢化&#xff0c;則再下載安裝Language_Packs.exe的安裝包 說明&#xff1a;LoadR…

ABC410 : F - Balanced Rectangles

https://atcoder.jp/contests/abc410/tasks/abc410_fhttps://atcoder.jp/contests/abc410/tasks/abc410_f首先可以一眼看出暴力 &#xff1a;枚舉左上角和右下角&#xff0c;用前綴和算出矩形中#的數量&#xff0c;判斷即可 但這樣是,爆!!! 考慮優化&#xff0c;我們可以枚舉…

嵌入式學習筆記 - HAL庫對外設的封裝

一 外設封裝結構 HAL庫對外設的封裝使用了xx_HandleTypeDef類型的外設句柄結構體&#xff0c;這個句柄結構體的第一個成員Instance(xx_TypeDef類型)一般為該外設的所有寄存器的起始基地址&#xff0c;第二個成員Init&#xff08;xx_InitTypeDef類型&#xff09;一般為該外設的設…