Home  >  Q&A  >  body text

Unable to retrieve data using postgres and nodeJS

This is how I set up the following files: 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}!`))

and expense_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
  }

I get the error Unable to retrieve charges: TypeError: Cannot read property of undefined (read 'json') I also get an Object.getExpenses error when submitting the form on the frontend. The problem may lie in the way postgres is connected. This is my first time using postreSQL, so I'm not very familiar with it.

P粉445714413P粉445714413182 days ago288

reply all(1)I'll reply

  • P粉066725148

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

    Okay, so I didn't call the function correctly, It should look like this: app.get('/',expense_model.getExpenses); In my original code, I called the function without passing any parameters, and it required both res and req .

    reply
    0
  • Cancelreply