Heim  >  Fragen und Antworten  >  Hauptteil

Daten können nicht mit Postgres und NodeJS abgerufen werden

So habe ich folgende Dateien eingerichtet: 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}!`))

und cost_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
  }

Ich erhalte die Fehlermeldung Gebühren konnten nicht abgerufen werden: TypeError: Eigenschaft von undefiniert kann nicht gelesen werden (lesen Sie „json“). Ich erhalte auch einen Object.getExpenses-Fehler, wenn ich das Formular im Frontend absende. Das Problem könnte in der Art und Weise liegen, wie Postgres verbunden ist. Ich verwende postreSQL zum ersten Mal und bin daher nicht sehr vertraut damit.

P粉445714413P粉445714413182 Tage vor286

Antworte allen(1)Ich werde antworten

  • P粉066725148

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

    好吧,所以我没有正确调用该函数, 应该是这样的: app.get('/',expense_model.getExpenses); 在我的原始代码中,我调用了不传递任何参数的函数,而它同时需要 res 和 req 。

    Antwort
    0
  • StornierenAntwort