when trying to pass json data on the post endpoint, I get that the body is partialy undefined, it happen after I divided the api in diferent files, after that I get the ER_BAD_NULL_ERROR: Column 'User' cannot be null error, but unable to find the source of the error
"dependencies": {
"body-parser": "^1.20.2",
"express": "^4.18.3",
"mysql": "^2.18.1",
"nodemailer": "^6.9.12",
"nodemon": "^3.1.0",
"routes": "^2.1.0"
}
//Index.js
const express = require('express');
const userRoutes = require("./Routes/userRoutes");
const app = express();
// Middleware for parsing JSON body
app.use(express.json());
app.use(express.urlencoded({extended: true}));
// Use routes
app.use('/api/users', userRoutes);
// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
//userRoutes.js
const express = require('express');
const nodemailer = require('nodemailer');
const mysql = require('mysql');
const router = express.Router();
//var bodyParser = require('body-parser');
//router.use(express.json());
//router.use(express.urlencoded({extended: false}));
var error = 0;
// Define user routes
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
database: 'contacts'
});
// Middleware for sending emails
const transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: '',
pass: ''
}
});
// Functions here
function ValidarInput(name, password, Google_Login, Apple_Login, Apple_Id, Saldo, ValorDevido, IS_Allowed ) {
if (!name || !password || Google_Login == null || Apple_Login == null || !Apple_Id || Saldo == null || ValorDevido == null || IS_Allowed == null) {
console.log("Failed to create user");
}
}
//Functions here
// Connect to MySQL
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL: ' + err.stack);
return;
}
console.log('Connected to MySQL as id ' + connection.threadId);
});
// GET all users
router.get('/', (req, res) => {
connection.query('SELECT * FROM users', (error, results, fields) => {
if (error) {
console.error('Error retrieving users: ' + error);
res.status(500).json({ message: 'Internal server error' });
return;
}
res.json(results);
});
});
router.get('/:id', (req, res) => {
connection.query(`SELECT * FROM users WHERE id = ${req.params.id}` , (error, results, fields) => {
if (error) {
console.error('Error retrieving users: ' + error);
res.status(500).json({ message: 'Internal server error' });
return;
}
res.json(results);
});
});
router.post('/', (req, res) => {
const { name, password, Google_Login, Apple_Login, Apple_Id, Saldo, ValorDevido, IS_Allowed } = req.body;
ValidarInput(name, password, Google_Login, Apple_Login, Apple_Id, Saldo, ValorDevido, IS_Allowed);
if (error != 0) {
return res.status(400).json({ message: 'All fields are required' });
}else{
connection.query(`INSERT INTO users (User, Password, Google_Login, Apple_Login, Apple_Id, Saldo, ValorDevido, IS_Allowed) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,[name, password, Google_Login, Apple_Login, Apple_Id, Saldo, ValorDevido, IS_Allowed], (error, results, fields) => {
if (error) {
console.error('Error creating user: ' + error);
res.status(500).json({ message: 'Internal server error' });
return;
}
res.status(201).json({ id: results.insertId, name, password, Google_Login, Apple_Login, Apple_Id, Saldo, ValorDevido, IS_Allowed });
});
}
});
// PATCH/UPDATE user by ID
router.patch('/:id', (req, res) => {
const userId = req.params.id;
const { name, password, Google_Login, Apple_Login, Apple_Id, Saldo, ValorDevido, IS_Allowed } = req.body;
let updateQuery = 'UPDATE users SET ';
let updateFields = [];
let updateValues = [];
if (!name) {
updateFields.push('User=?');
updateValues.push(name);
}
if (Google_Login !== undefined) {
updateFields.push('Google_Login=?');
updateValues.push(Google_Login);
}
if (Apple_Login !== undefined) {
updateFields.push('Apple_Login=?');
updateValues.push(Apple_Login);
}
if (Apple_Id) {
updateFields.push('Apple_Id=?');
updateValues.push(Apple_Id);
}
if (Saldo !== undefined) {
updateFields.push('Saldo=?');
updateValues.push(Saldo);
}
if (ValorDevido !== undefined) {
updateFields.push('ValorDevido=?');
updateValues.push(ValorDevido);
}
if (IS_Allowed !== undefined) {
updateFields.push('IS_Allowed=?');
updateValues.push(IS_Allowed);
}
if (updateFields.length === 0) {
return res.status(400).json({ message: 'No fields to update' });
}
updateQuery += updateFields.join(', ') + ' WHERE id=?';
updateValues.push(userId);
connection.query(updateQuery, updateValues, (error, results, fields) => {
if (error) {
console.error('Error updating user: ' + error);
res.status(500).json({ message: 'Internal server error' });
return;
}
res.json({ message: 'User updated successfully' });
});
});
router.patch('/:id/passwordreset', (req, res) => {
const userId = req.params.id;
const { password } = req.body;
let updateQuery = 'UPDATE users SET ';
let updateFields = [];
let updateValues = [];
if (password !== undefined) {
updateFields.push('Password=?');
updateValues.push(password);
}
if (updateFields.length === 0) {
return res.status(400).json({ message: 'No fields to update' });
}
updateQuery += updateFields.join(', ') + ' WHERE id=?';
updateValues.push(userId);
connection.query(updateQuery, updateValues, (error, results, fields) => {
if (error) {
console.error('Error updating user: ' + error);
res.status(500).json({ message: 'Internal server error' });
return;
}
res.json({ message: 'User updated successfully' });
});
});
// DELETE user by ID
router.delete('/:id', (req, res) => {
const userId = req.params.id;
connection.query('DELETE FROM users WHERE id = ?', userId, (error, results, fields) => {
if (error) {
console.error('Error deleting user: ' + error);
res.status(500).json({ message: 'Internal server error' });
return;
}
if (results.affectedRows === 0) {
return res.status(404).json({ message: 'User not found' });
}
res.json({ message: 'User deleted successfully' });
});
});
router.post('/send-email', (req, res) => {
const { to, subject, text } = req.body;
// Setup email data
const mailOptions = {
from: '[email protected]',
to: to,
subject: subject,
text: text
};
// Send email
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.error('Error sending email:', error);
res.status(500).send('Error sending email');
} else {
console.log('Email sent:', info.response);
res.status(200).send('Email sent successfully');
}
});
});
// Export router
module.exports = router;
It's suposed to insert in a mysql database, but cant pass the data