Ini adalah cara saya menyediakan fail berikut: 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}!`))
dan model_perbelanjaan.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 }
Saya mendapat ralat Tidak dapat mengambil caj: TypeError: Tidak dapat membaca sifat undefined (baca 'json') Saya juga mendapat ralat Object.getExpenses apabila menyerahkan borang pada bahagian hadapan. Masalahnya mungkin terletak pada cara postgres disambungkan. Ini adalah kali pertama saya menggunakan postreSQL, jadi saya tidak begitu biasa dengannya.
Baiklah, jadi saya tidak memanggil fungsi dengan betul, Ia sepatutnya kelihatan seperti ini:
app.get('/',expense_model.getExpenses);
Dalam kod asal saya, saya memanggil fungsi tanpa lulus sebarang parameter, dan ia memerlukan kedua-dua res dan req .