C'est ainsi que j'ai configuré les fichiers suivants : index.js
const express = require('express') const app = express() const port = 8000 const expense_model = require('./expense_model') app.use(express.json()); app.use(function (req, res, next) { res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000'); res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Access-Control-Allow-Headers'); next(); }); app.get('/', (req, res) => { expense_model.getExpenses() .then(expenses => { res.status(200).json(expenses); }) .catch(error => { console.error('Failed to retrieve expenses:', error); res.status(500).json({ error: 'Failed to retrieve expenses' }); }); }); app.post('/expenses', (req, res) => { expense_model.createExpense(req.body) .then(response => { res.status(200).send(response); }) .catch(error => { res.status(500).send(error); }) }) app.delete('/expenses/:id', (req, res) => { expense_model.deleteExpense(req.params.id) .then(response => { res.status(200).send(response); }) .catch(error => { res.status(500).send(error); }) }) app.listen(port, () => console.log(`Example app listening on port ${port}!`))
et dépenses_model.js
const Pool = require('pg').Pool const pool = new Pool({ user: 'my_user', host: 'localhost', database: 'my_database', password: 'root', port: 5432, }); async function getExpenses(req, res) { try { const query = 'SELECT * FROM expenses'; const result = await pool.query(query); const expenses = result.rows; res.status(200).json(expenses); console.log('Response:', res); } catch (err) { console.error('Failed to retrieve expenses:', err); res.status(500).json({ error: 'Failed to retrieve expenses' }); } } async function createExpense(req, res) { const { expense, amount, description, tag } = req.body; const query = 'INSERT INTO expenses (expense, amount, description, tag) VALUES (, , , ) RETURNING *'; const values = [expense, amount, description, tag]; try { const result = await pool.query(query, values); res.status(201).json(result.rows[0]); } catch (err) { console.error('Failed to create an expense:', err); res.status(500).json({ error: 'Failed to create an expense' }); } } async function updateExpense(req, res) { const id = parseInt(req.params.id); const { expense, amount, description, tag } = req.body; const query = 'UPDATE expenses SET expense = , amount = , description = , tag = WHERE id = '; const values = [expense, amount, description, tag, id]; try { const result = await pool.query(query, values); if (result.rowCount === 0) { res.status(404).json({ error: 'Expense not found' }); } else { res.json({ message: 'Expense updated successfully' }); } } catch (err) { console.error('Failed to update an expense:', err); res.status(500).json({ error: 'Failed to update an expense' }); } } async function deleteExpense(req, res) { const id = parseInt(req.params.id); const query = 'DELETE FROM expenses WHERE id = '; const values = [id]; try { const result = await pool.query(query, values); if (result.rowCount === 0) { res.status(404).json({ error: 'Expense not found' }); } else { res.json({ message: 'Expense deleted successfully' }); } } catch (err) { console.error('Failed to delete an expense:', err); res.status(500).json({ error: 'Failed to delete an expense' }); } } module.exports = { getExpenses, createExpense, deleteExpense, updateExpense }
J'obtiens l'erreur Impossible de récupérer les frais : TypeError : Impossible de lire la propriété non définie (lire 'json') Je reçois également une erreur Object.getExpenses lors de la soumission du formulaire sur le frontend. Le problème réside peut-être dans la façon dont Postgres est connecté. C'est la première fois que j'utilise postreSQL, donc je ne le connais pas très bien.
D'accord, donc je n'ai pas appelé la fonction correctement, Ça devrait ressembler à ça:
app.get('/',expense_model.getExpenses);
Dans mon code d'origine, j'ai appelé la fonction sans passer aucun paramètre, et cela nécessitait à la fois res et req .