'sending data from html form to mysql database using node js
I'm making an app and I'd like to have a register page. Here is the html form :
<form method="post" action="/register">
<p>Nom <input type='text' id="nom"></p>
<p>Prénom <input type='text' id="prenom"></p>
<p>Mot de passe <input type='text' id="mdp"></p>
<p>Email <input type='text' id="email"></p>
<input type="submit" value="Valider" id="envoyer">
</form>
my server.js :
var express = require('express');
var async = require('async');
var bodyParser = require("body-parser");
var mysql = require('mysql');
var hostname = 'localhost';
var port = 3000;
var app = express();
////////////////
// MYSQL //
////////////////
const connection = require('./config/database');
connection.connect(function (err){
if (err) throw err;
console.log("Le serveur s'est bien connecté sur la base de donnée MYSQL")
});
////////////////
// ROUTING //
////////////////
var home = require('./app/routes/home');
var login = require('./app/routes/users/login');
var register = require('./app/routes/users/register');
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.get('/', home);
app.get('/login/', login);
app.post('/register/', register);
////////////////
// SERVER //
////////////////
app.listen(port, hostname, function(){
console.log("Mon serveur fonctionne sur http://"+ hostname +":"+port);
});
my register.js :
module.exports = (function() {
'use strict';
const connection = require('../../../config/database');
var router = require('express').Router();
var User = require('../../models/User');
router.get('/register', function(req, res) {
console.log(req.body.firstname)
User.addUser(req.query.firstname, req.query.lastname, req.query.email, req.query.password,function(err,rows){
if(err)
{
return res.json({
'code':'500',
'success':'false',
'msg': err
});
}
else{
return res.json({
'code':'200',
'success':'true',
'msg':'Bonjour '+rows[0].firstname+', vous avez bien été créé'
});
}
});
});
return router;
})();
my user.js :
addUser:function(firstname,lastname,email,password,callback){
return db.query
(
"INSERT INTO `users` VALUES (?,?,?,?)"
+ [firstname,lastname,email,password],
callback
);
},
but when I enter some values in my form I get this error :
The requested URL /register was not found on this server.
I don't know where I'm missing something has anyone any ideas ?
Solution 1:[1]
First, you should remove the trailing slashes when you define your routes:
app.post('/register', register);
In your server.js file, you have already established your /register route to be a POST route and have set the handler as your register.js module. The request data is sent directly to that function so there is no need to setup a new route inside of it. Here is an example of what your register.js should look like:
'use strict';
const connection = require('../../../config/database');
const User = require('../../models/User');
module.exports = function(req, res) {
console.log(req.body.firstname);
User.addUser(req.body.firstname, req.body.lastname, req.body.email, req.body.password,function(err,rows){
if(err) {
return res.status(500).json({
'code':'500',
'success':'false',
'msg': err});
} else {
return res.status(200).json({
'code':'200',
'success':'true',
'msg':'Bonjour '+rows[0].firstname+', vous avez bien été créé'});
}
});
});
};
Also, when creating your form inputs, you must include a name on each one so the server knows which property is which.
So on your 'first name' input, set the name attribute of the input element as something like 'firstname'. Then when the server receives a request, you can access 'firstname' in req.body.
Your HTML input should look like this:
<input type='text' name="firstname" id="someid">
Then in your register.js, you can access that variable like this:
req.body.firstname
Solution 2:[2]
addUser:function(firstname,lastname,email,password,callback){
return db.query
(
"INSERT INTO `users` VALUES (?,?,?,?)"
+ [firstname,lastname,email,password],
callback
);
},
The error comes from syntaxe error there is a "+" after "INSERT INTO" that I should remove :
addUser:function(firstname,lastname,email,password,callback){
return db.query
(
"INSERT INTO `users` VALUES (?,?,?,?)"
[firstname,lastname,email,password],
callback
);
},
Thx all for your answers !
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Sam Caneau |
