2017-02-23 120 views
0

我是新手,想用node.js創建一個基本的應用程序。使用node.js將數據添加到mysql數據庫

我在使用html代替jade的visual studio上使用node.js。我有一個名字,姓氏和性別的簡單表格。我也設法使用mysql工作臺建立數據庫。

我有以下查詢,它將名稱,姓氏和性別成功添加到mysql數據庫,當我運行代碼。

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

但是當我點擊提交按鈕時必須從表單收集數據時,我被卡住了。

我猜想它與Ajax有關,我發現了一些使用php的解決方案,但我正在努力尋找使用node.js的解決方案以及如何以及如何實現代碼。

這裏是app.js文件

/** 
* 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

您能告訴我們關於代碼/設置的更多信息嗎?你的網頁是什麼樣的?你的服務器是什麼樣的? – paqash

+0

我現在沒有使用系統,但我剛開始使用默認的快速模板,並添加了這個簡單的表單,以瞭解如何將值存入數據庫。另外,我沒有得到關於服務器的問題。你能否詳細說明一下? –

+0

我不確定你需要幫助的確切位置。它是否將表單中的值提交給快速服務器,在服務器上創建一個路徑來處理提交,從路由處理程序調用控制器方法,還是上述所有內容? – paqash

回答

0

好吧,讓我們給它一個鏡頭。

在HTML頁面上,您需要提交學生的詳細信息。一個非常非常基本的形式是這樣的:

<form action="/student" method="post"> 
    First name:<br> 
    <input type="text" name="name"<br> 
    Last name:<br> 
    <input type="text" name="surname"><br> 
    Date of birth:<br> 
    <input type="text" name="dob"<br> 
    Gender:<br> 
    <input type="text" name="gender"><br><br> 
    <input type="submit" value="Submit"> 
</form> 

這顯然是過於簡單化了,但它會做到這一點。所以你有一些盒子和一個按鈕,將這個數據POST到你的服務器/student路由。

現在我們需要在快遞服務器上處理該路線。您已有get路線,請添加以下內容:

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

不錯!這樣可行!非常感謝....我試着玩了一些mysql表的一些聲明和設置,最後它的工作原理。有一些關於我可以在後面找出的數據庫的事情,但我唯一想知道這種情況的是最後一行 - >> re.send();在新頁面中提供註釋,如果我刪除了該語句,則表單中的頁面將保留,但瀏覽器顯示某個過程正在進行。那裏發生了什麼? –

+0

你可以嘗試類似'res.status(200).send()' – paqash

+0

這不起作用,但我找到了答案...位置重新加載onsubmit。謝謝您的幫助! –