Skip to content

quoclam204/nodejs-aspnet-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Demo Backend – To-Do API (Node.js & ASP.NET Core) + Web Client

Dự án phục vụ bài thực hành Client–Server. Repo này có 2 backend (cùng API To-Do) và 1 web client tối giản:

  • Node.js: Express + Sequelize + SQLite (mặc định :3001)
  • ASP.NET Core 8: Minimal API + EF Core + SQLite (khuyên chạy :3002)
  • web-client: trang HTML/JS gọi API

Hai backend dùng cùng thiết kế API (/api/todos). Chạy một trong hai hoặc cả hai (khác cổng).


Cấu trúc dự án

demo-backend/
├─ aspnet-demo/               # ASP.NET Core 8 Minimal API + EF Core + SQLite
│  ├─ Program.cs
│  ├─ aspnet-demo.csproj
│  ├─ Properties/
│  │  └─ launchSettings.json
│  └─ todos.db                 # sinh ra khi chạy
│
├─ nodejs-demo/               # Node.js + Express + Sequelize + SQLite
│  ├─ models/
│  │  └─ Todo.js
│  ├─ server.js
│  ├─ package.json
│  └─ todos.db                 # sinh ra khi chạy
│
├─ web-client/                # Client HTML/JS (tùy chọn)
│  ├─ index.html
│  ├─ styles.css
│  └─ script.js
│
├─ demo-backend.sln           # Solution mở bằng Visual Studio
├─ ghichu-server              # Ghi chú server
└─ README.md

Chạy nhanh chương trình

Node.js

cd nodejs-demo
npm install       # chỉ cần khi mới tải mã nguồn về
npm run start

Mở trình duyệt hoặc dùng curl:

http://localhost:3001/api/todos

ASP.NET Core

CMD:

cd aspnet-demo
set ASPNETCORE_URLS=http://localhost:3002 && dotnet run

PowerShell:

cd aspnet-demo
$env:ASPNETCORE_URLS="http://localhost:3002"; dotnet run

Mở trình duyệt hoặc dùng curl:

http://localhost:3002/api/todos

---

## Yêu cầu môi trường

- **Node.js ≥ 16** · kiểm tra: `node -v`  
- **.NET SDK ≥ 8.0** · kiểm tra: `dotnet --version`  
- **VS Code** (khuyên dùng), **Postman**/**curl** để test API

> Nếu mới cài, **mở terminal mới** để PATH cập nhật.

---

## 1) Chạy backend Node.js (Express + Sequelize + SQLite)

```bash
cd nodejs-demo
# Cài thư viện (lần đầu)
npm install

# Chạy server
npm run start
# hoặc reload khi sửa file
npm run dev
  • Mặc định API: http://localhost:3001
  • package.json cần có:
    "type": "module",
    "scripts": {
      "start": "node server.js",
      "dev": "node --watch server.js"
    }

Endpoint

  • GET /api/todos
  • GET /api/todos/{id}
  • POST /api/todos (body: { "title": "..." })
  • PUT /api/todos/{id} (body: { "title"?: string, "completed"?: boolean })
  • POST /api/todos/{id}/toggle
  • DELETE /api/todos/{id}

Test nhanh (curl)

curl http://localhost:3001/api/todos

curl -X POST http://localhost:3001/api/todos   -H "Content-Type: application/json"   -d "{"title":"Đọc tài liệu HTTP"}"

curl -X PUT http://localhost:3001/api/todos/1   -H "Content-Type: application/json"   -d "{"title":"Đã sửa","completed":true}"

curl -X POST http://localhost:3001/api/todos/1/toggle
curl -X DELETE http://localhost:3001/api/todos/1

Lần chạy đầu, API sẽ seed một vài Todo mẫu nếu DB trống.


2) Chạy backend ASP.NET Core 8 (Minimal API + EF Core + SQLite)

cd aspnet-demo
dotnet restore
dotnet run

Mặc định Kestrel dùng cổng trong Properties/launchSettings.json. Bạn có thể:

Cố định cổng 3002 (cách A – sửa launchSettings.json)

Mở aspnet-demo/Properties/launchSettings.json và đặt:

{
  "$schema": "https://json.schemastore.org/launchsettings.json",
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:3002",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

Chạy:

dotnet run
# → Now listening on: http://localhost:3002

Cố định cổng 3002 (cách B – không sửa file)

  • PowerShell
    $env:ASPNETCORE_URLS="http://localhost:3002"; dotnet run --no-launch-profile
  • CMD
    set ASPNETCORE_URLS=http://localhost:3002 && dotnet run --no-launch-profile

Endpoint (giống Node)

  • GET /api/todos
  • GET /api/todos/{id}
  • POST /api/todos
  • PUT /api/todos/{id}
  • POST /api/todos/{id}/toggle
  • DELETE /api/todos/{id}

Test nhanh (curl)

curl http://localhost:3002/api/todos
curl -X POST http://localhost:3002/api/todos -H "Content-Type: application/json" -d "{"title":"Ôn Node.js & ASP.NET Core"}"
curl -X PUT http://localhost:3002/api/todos/1 -H "Content-Type: application/json" -d "{"title":"Đã sửa","completed":true}"
curl -X POST http://localhost:3002/api/todos/1/toggle
curl -X DELETE http://localhost:3002/api/todos/1

Lần chạy đầu, API cũng seed một vài Todo mẫu.


3) Web Client (tùy chọn)

  • Vào web-client/, mở index.html (nên chạy bằng extension Live Server trong VS Code).
  • Nếu client có biến cấu hình API_BASE_URL, đặt về:
    • http://localhost:3001 (Node), hoặc
    • http://localhost:3002 (ASP.NET)
  • Đảm bảo backend tương ứng đang chạy. CORS đã mở sẵn.

4) Kiểm thử với Postman / VS Code REST Client

Postman

Tạo collection với các request giống phần curl. (Hoặc import file collection nếu cung cấp kèm repo.)

VS Code – REST Client

Tạo file test.http và dán:

@baseUrl = http://localhost:3001   # hoặc 3002

GET {{baseUrl}}/api/todos

POST {{baseUrl}}/api/todos
Content-Type: application/json

{ "title": "Ví dụ REST Client" }

PUT {{baseUrl}}/api/todos/1
Content-Type: application/json

{ "title": "Đã sửa", "completed": true }

POST {{baseUrl}}/api/todos/1/toggle
DELETE {{baseUrl}}/api/todos/1

5) .gitignore gợi ý

aspnet-demo/.gitignore

bin/
obj/
*.user
*.suo
*.sln.docstates
.vscode/
.idea/
*.db
*.sqlite
*.sqlite3
logs/
*.log

nodejs-demo/.gitignore

node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
.env
.DS_Store
.vscode/
*.db
*.sqlite
*.sqlite3

6) Lỗi thường gặp

  • Node: npm run start báo thiếu script
    → Thêm vào nodejs-demo/package.json:

    "scripts": { "start": "node server.js", "dev": "node --watch server.js" }
  • Node: Cannot find module '.../server.js'
    → Đảm bảo server.js nằm trực tiếp trong nodejs-demo/ (không để trong thư mục con), hoặc chỉnh script đúng đường dẫn.

  • ASP.NET chạy sai cổng dù đã đặt ASPNETCORE_URLS
    → Bạn vẫn đang dùng launchSettings.json. Dùng --no-launch-profile hoặc sửa applicationUrl trong file đó.

  • SQLITE_BUSY (DB bị khóa)
    → Đóng app đang mở file DB (DB Browser, VS Code preview…), chạy lại.


Bản quyền

Mã nguồn phục vụ học tập/thử nghiệm. Bạn có thể fork và dùng cho mục đích cá nhân/giảng dạy.

Tác giả: Nguyễn Lê Quốc Lâm – Dalat University (Backend in training).
Nếu thấy hữu ích, hãy ⭐ repo để ủng hộ!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published