This project demonstrates how to adapt familiar Express.js and Mongoose patterns to work in Val Town's Deno environment using Hono and SQLite.
The project follows Express/Mongoose conventions but uses Val Town's stack:
├── index.ts # Main app (like Express app.js)
├── models/
│ └── User.ts # User model (Mongoose-style patterns)
├── controllers/
│ └── userController.ts # Route handlers (Express controller style)
├── routes/
│ └── userRoutes.ts # Route definitions (Express router style)
├── middleware/
│ └── errorHandler.ts # Error handling middleware
└── README.md
GET /api/users/:id
Response:
{ "success": true, "data": { "id": 1, "name": "John Doe", "email": "john@example.com", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" } }
GET /api/users
POST /api/users
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com"
}
PUT /api/users/:id
Content-Type: application/json
{
"name": "Jane Doe",
"email": "jane@example.com"
}
DELETE /api/users/:id
UserModel.findById() - Similar to Mongoose User.findById()UserModel.create() - Similar to Mongoose User.create()UserModel.findByIdAndUpdate() - Similar to Mongoose methodc.req.param()curl https://your-val.web.val.run/api/users/1
curl -X POST https://your-val.web.val.run/api/users \ -H "Content-Type: application/json" \ -d '{"name": "John Doe", "email": "john@example.com"}'
curl https://your-val.web.val.run/api/users
The API includes comprehensive error handling: