Update api.js

This commit is contained in:
xfarrow 2023-09-27 15:07:40 +02:00
parent 46d88b06a9
commit 022a85e211

View File

@ -3,24 +3,25 @@
** licensed under GPLv3 ** licensed under GPLv3
*/ */
const express = require('express'); const express = require('express');
const { Client } = require('pg');
const bcrypt = require('bcrypt'); const bcrypt = require('bcrypt');
const { Pool } = require('pg');
const app = express(); const app = express();
const port = 3000; const port = 3000;
// Middleware which parses JSON for POST requests // Middleware which parses JSON for POST requests
app.use(express.json()); app.use(express.json());
// Sample data (an array of items) const pool = new Pool({
const items = [ user: 'postgres',
{ id: 1, name: 'Item 1' }, host: 'localhost',
{ id: 2, name: 'Item 2' }, database: 'Blink',
{ id: 3, name: 'Item 3' }, password: 'postgres',
]; port: 5432,
max: 10,
idleTimeoutMillis: 30000,
});
// Define a route to get all items // Define a route to get all items
app.get('/api/items', (req, res) => { app.get('/api/items', (req, res) => {
@ -32,25 +33,21 @@ app.post('/api/register', (req, res) => {
const userData = req.body; const userData = req.body;
// Ensure that the required fields are present before proceeding // Ensure that the required fields are present before proceeding
if (!userData.display_name || !userData.email) { if (!userData.display_name || !userData.email || !userData.password) {
return res.status(400).json("Invalid request"); return res.status(400).json("Invalid request");
} }
// Create a PostgreSQL client bcrypt.hash(userData.password, 10, (err, hashedPassword) => {
const client = new Client({ if (err) {
user: 'postgres', console.error('Error hashing password:', err);
host: 'localhost', } else {
database: 'Blink', // Acquire a connection from the pool
password: 'postgres', pool.connect()
port: 5432, // Default PostgreSQL port .then((client) => {
}); // SQL query with placeholders for parameters
const insertQuery = `
client.connect() INSERT INTO "User" (display_name, date_of_birth, place_of_living, is_looking_for_job, email, password)
.then(() => { VALUES ($1, $2, $3, $4, $5, $6)
// SQL query with placeholders for parameters
const insertQuery = `
INSERT INTO "User" (display_name, date_of_birth, place_of_living, is_looking_for_job, email)
VALUES ($1, $2, $3, $4, $5)
RETURNING *`; // Return the inserted row RETURNING *`; // Return the inserted row
return client.query(insertQuery, [ return client.query(insertQuery, [
@ -58,21 +55,28 @@ app.post('/api/register', (req, res) => {
userData.date_of_birth, userData.date_of_birth,
userData.place_of_living, userData.place_of_living,
userData.is_looking_for_job, userData.is_looking_for_job,
userData.email userData.email,
]); hashedPassword
}) ])
.then((result) => { .then((result) => {
// Respond with the inserted user data // Respond with the inserted user data
res.status(200).json(result.rows[0]); res.status(200).json(result.rows[0]);
})
.catch((error) => {
console.error('Error inserting data:', error);
res.status(500).json("Internal server error");
})
.finally(() => {
// Release the connection back to the pool
client.release();
});
}) })
.catch((error) => { .catch((error) => {
console.error('Error inserting data:', error); console.error('Error acquiring a connection from the pool:', error);
res.status(500).json("Internal server error"); res.status(500).json("Internal server error");
})
.finally(() => {
// Close the database connection
client.end();
}); });
}
});
}); });
// Start the server // Start the server