2017-02-23 2 views
0

Ich bin neu in der Programmierung und versuche, eine Basis-App mit node.js zu erstellen.Hinzufügen von Daten zur mysql-Datenbank mit node.js

Ich benutze node.js auf Visual Studio mit HTML anstelle von Jade. Ich habe ein einfaches Formular mit Namen, Nachnamen und Geschlecht. Ich habe es auch geschafft, eine Datenbank mit mysql workbench einzurichten.

Ich habe die folgende Abfrage, die den Namen, Nachnamen und Geschlecht erfolgreich in die MySQL-Datenbank fügt, wenn ich den Code ausführen.

Aber ich bin fest, wenn die Daten aus dem Formular gesammelt werden müssen, wenn ich auf die Schaltfläche Absenden klicken.

Ich denke, es ist etwas mit Ajax zu tun, ich habe einige Lösungen mit PHP gefunden, aber ich habe Probleme mit Lösungen mit node.js und wie und wo der Code zu implementieren. Hier

ist die app.js

Datei
/** 
* Module dependencies. 
*/ 

var express = require('express'); 
var routes = require('./routes'); 
var http = require('http'); 
var path = require('path'); 
var mysql = require('mysql'); 

var app = express(); 

var connection = mysql.createConnection({ 
    host: 'localhost', 
    user: 'root', 
    password: 'my_password', 
    database: 'userlist', 
}); 

connection.connect(); 

var user = { "name": "RandomName", "surname": "RandomSurnameName", "gender" : "M" }; 
connection.query('INSERT INTO studentinfo SET ?', user, function (err, res) { 
    if (err) throw err; 


}); 



//connection.query('SELECT * FROM studentinfo', function (err, rows) { 
// if (err) throw err; 

// console.log('Data received from Db:\n'); 
// console.log(rows); 
//}); 





// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.engine('html', require('ejs').renderFile); 
app.set('view engine', 'html'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.json()); 
app.use(express.urlencoded()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(require('stylus').middleware(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'))); 
// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

app.get('/', routes.index); 
app.get('/about', routes.about); 
app.get('/contact', routes.contact); 
app.get('/newStudent', routes.newStudent); 

http.createServer(app).listen(app.get('port'), function() { 
    console.log('Express server listening on port ' + app.get('port')); 
}); 


var createStudent = { 

    name: String, 
    surname: String, 
    dob: Date, 
    gender: String, 

} 


connection.query('insert into userlist set ?', createStudent, function (err, result) { 

}); 
+0

Können Sie uns mehr über den Code/Setup? Wie sieht deine Seite aus? Wie sieht dein Server aus? – paqash

+0

Ich bin gerade nicht mit dem System, aber ich beginne gerade mit der Standard-Express-Vorlage und habe dieses einfache Formular hinzugefügt, um zu lernen, wie man die Werte in die Datenbank bekommt. Außerdem habe ich Ihre Frage zu dem Server nicht beantwortet. Könntest du bitte etwas ausarbeiten? –

+0

Ich bin mir nicht sicher, wo genau Sie Hilfe brauchen. Sendet es Werte von einem Formular an den Express-Server, erstellt eine Route auf dem Server, um den Submit zu behandeln, ruft eine Controller-Methode vom Routen-Handler auf oder alle oben genannten Punkte? – paqash

Antwort

0

Ok, geben wir ihm einen Schuss.

Auf der HTML-Seite müssen Sie die Studentendetails übermitteln. Ein sehr, sehr einfaches Formular sieht so aus:

Dies ist offensichtlich zu vereinfacht, aber es wird den Trick tun. So haben Sie einige Felder und eine Schaltfläche, POST diese Daten an Ihren Server /student Route.

Jetzt müssen wir diese Route auf dem Express-Server behandeln. Sie haben bereits get Routen, fügen Sie also Folgendes hinzu:

app.post('/', function (req, res) { 
    // this is where you handle the POST request. 
    var createStudent = { 
    name: req.body.name, 
    surname: req.body,surname, 
    dob: req.body.dob, 
    gender: req.body.gender 
    } 
    // now the createStudent is an object you can use in your database insert logic. 
    connection.query('INSERT INTO studentinfo SET ?', createStudent, function (err, resp) { 
    if (err) throw err; 
    // if there are no errors send an OK message. 
    res.send('Save succesfull'); 
    }); 
}); 
+0

Schön! das funktioniert! Vielen Dank .... Ich habe versucht, mit einigen der Aussagen und Einstellungen der MySQL-Tabelle zu spielen und schließlich funktioniert es. Es gibt einige Dinge über die Datenbank, die ich später herausfinden kann, aber das einzige, worüber ich mich in diesem Fall wundere, ist, dass die letzte Zeile - >> re.send(); Gibt den Kommentar innerhalb einer neuen Seite an und wenn ich die Anweisung entferne, bleibt die Seite mit dem Formular erhalten, aber der Browser zeigt an, dass ein Prozess läuft. Was passiert dort? –

+0

Sie können versuchen, etwas wie 'res.status (200) .send()' – paqash

+0

Das funktioniert nicht, aber ich habe eine Antwort auf diese ... location reload onsubmit gefunden. Danke für die Hilfe! –

Verwandte Themen