crud_node
crud_node
Claro, vou te guiar através da criação de um CRUD básico em Node.js com PostgreSQL
e TypeScript, seguindo o padrão de arquitetura MVC (Model-View-Controller) com
serviços adicionados.
bash
Copiar código
mkdir nodejs-crud
cd nodejs-crud
bash
Copiar código
npm init -y
npm install typescript ts-node @types/node
npx tsc --init
bash
Copiar código
npm install express pg pg-promise body-parser
plaintext
Copiar código
nodejs-crud/
│
├── src/
│ ├── controllers/
│ │ └── itemController.ts
│ │
│ ├── models/
│ │ └── itemModel.ts
│ │
│ ├── services/
│ │ └── itemService.ts
│ │
│ ├── routes/
│ │ └── itemRoutes.ts
│ │
│ ├── config.ts
│ ├── db.ts
│ ├── server.ts
│ └── types.ts
│
├── .gitignore
└── package.json
Agora, vamos preencher cada um desses arquivos com o código apropriado:
1. config.ts:
typescript
Copiar código
export const DB_CONFIG = {
host: 'localhost',
port: 5432,
database: 'crud_db',
user: 'postgres',
password: 'your_password_here',
};
2. db.ts:
typescript
Copiar código
import { DB_CONFIG } from './config';
import pgPromise from 'pg-promise';
3. types.ts:
typescript
Copiar código
export interface Item {
id?: number;
name: string;
description: string;
}
4. itemModel.ts:
typescript
Copiar código
import db from '../db';
import { Item } from '../types';
class ItemModel {
async getAllItems(): Promise<Item[]> {
return db.many('SELECT * FROM items');
}
5. itemService.ts:
typescript
Copiar código
import itemModel from '../models/itemModel';
import { Item } from '../types';
class ItemService {
async getAllItems(): Promise<Item[]> {
return itemModel.getAllItems();
}
6. itemController.ts:
typescript
Copiar código
import { Request, Response } from 'express';
import itemService from '../services/itemService';
import { Item } from '../types';
class ItemController {
async getAllItems(req: Request, res: Response): Promise<void> {
const items = await itemService.getAllItems();
res.json(items);
}
7. itemRoutes.ts:
typescript
Copiar código
import express from 'express';
import itemController from '../controllers/itemController';
router.get('/', itemController.getAllItems);
router.get('/:id', itemController.getItemById);
router.post('/', itemController.createItem);
router.put('/:id', itemController.updateItem);
router.delete('/:id', itemController.deleteItem);
8. server.ts:
typescript
Copiar código
import express, { Application, Request, Response } from 'express';
import bodyParser from 'body-parser';
import itemRoutes from './routes/itemRoutes';
// Middleware
app.use(bodyParser.json());
// Routes
app.use('/items', itemRoutes);
// Error handler
app.use((err: any, req: Request, res: Response, next: Function) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);