recherche

Maison  >  Questions et réponses  >  le corps du texte

Impossible de récupérer des données à l'aide de postgres et de nodeJS

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.

P粉445714413P粉445714413261 Il y a quelques jours417

répondre à tous(1)je répondrai

  • P粉066725148

    P粉0667251482024-04-04 00:05:55

    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 .

    répondre
    0
  • Annulerrépondre