I wanted the user to enter his credentials and be redirected to another html page if it matches the one in the database. If it doesn’t give an error message. I tried so many methods but I couldn’t seem to get it. I will leave the files here. yall do your thing please.
Here is the html page that accepts user credentials.
`<body>
<form action="login" method="post" class="form">
<h4>authenticate</h4>
<hr class="under-line">
<div class="form-row">
<label for="username" class="form-label">UserName</label>
<input type="text"
id="username"
name="username"
required
class="form-input">
</div>
<div class="form-row">
<label for="password" class="form-label">Password</label>
<input type="password"
id="password"
name="password"
required
class="form-input">
</div>
<button id="submitButton" type="submit" class="btn btn-block btn-teritiary">Submit</button>
</form>
</body>`
here is the env file
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=5321
DB_NAME=HRdatabase
and here is the app.js that handles the backend
`require('dotenv').config();
const { Pool } = require('pg');
const pool = new Pool({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
});
pool.on('error', (err) => {
console.error('Error connecting to PostgreSQL:', err);
process.exit(1);
});
express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = process.env.PORT || 5500; // Use a default port if not specified
app.use(bodyParser.urlencoded({ extended: false }));
// Route for hrauthentication.html (assuming it's in the project's root)
app.get('/', (req, res) => {
res.sendFile(__dirname + '/HRauthentication.html');
});
// Route to handle login form submission (POST request)
app.post('/login', async (req, res) => {
const { username, password } = req.body;
try {
const client = await pool.connect();
const result = await client.query('SELECT * FROM hrmanagers WHERE username = $1', [username]);
if (result.rows.length === 0) {
// Username not found
return res.status(401).send('Invalid username or password');
}
const user = result.rows[0];
if (password !== user.password) {
// Incorrect password
return res.status(401).send('Invalid username or password');
}
// Successful login, redirect to hrpage.html
res.redirect('/HRpage'); // Assuming hrpage.html is in the project's root
} catch (err) {
console.error('Error during login:', err);
res.status(500).send('Internal Server Error');
} finally {
pool.release(client);
}
});
// Route for hrpage.html (assuming it's in the project's root)
app.get('/hrpage', (req, res) => {
res.sendFile(__dirname + '/hrpage.html');
});
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});`
I have downloaded every dependency needed and start node js. I also created a database in pgadmin. I connected everything. I expected it to authenticate the user and take him to another page called “hrpage.html” but it didn’t. when i click submit it takes me to a page saying “This page isn’t working. HTTP ERROR 405. I need help ASAP.