2012-11-03 94 views
1

我是node.js的新手。我正在處理的一個項目需要將大數組(625項)作爲字符串存儲在MySQL數據庫中,並且我使用Node MySQL來完成該項目。Node.js beginner-請求無查詢字符串

現在我擁有它,以便在對「/(列名)?(值)」發出請求時更新該行。不幸的是,學習將625個項目作爲字符串傳遞給節點並不是最有效的方式。

對於除了querystrings以外的其他字符串傳遞大數組的方法,你有什麼建議嗎?

var http = require('http'), 
    mysql = require("mysql"), 
    url = require("url"), 
    express = require("express"); 

var connection = mysql.createConnection({ 
    user: "root", 
    database: "ballot" 

}); 

var app = express(); 
app.use(express.bodyParser()); 

app.options('/', function (request, response) 
{ 
    response.header("Access-Control-Allow-Origin", "*"); 
    response.end(); 
}); 

app.get('/', function (request, response) 
{ 
    connection.query("SELECT * FROM pathfind;", function (error, rows, fields) { 
     for(i=0;i<rows.length;i++) 
     { 
      response.send('<div id="layers">'+rows[i].layers+'</div> \ 
          <div   id="speed">'+rows[i].speed+'</div> \ 
          <div  id="direction">'+rows[i].direction+'</div>'); 
     } 
     response.end(); 
    }); 
}); 

app.post('/', function (request, response) 
{ 
    console.log(request.param('data', null)); 
    var urlData = url.parse(request.url, true); 
    if(urlData.pathname = '/layers') 
    { 
     col = "layers"; 
    } 
    else if(urlData.pathname = '/speed') 
    { 
     col = "speed"; 
    } 
else if(urlData.pathname = '/direction') 
    { 
     col = "direction"; 
    } 
    req.addListener("data", function(data) { 
     connection.query("UPDATE pathfind SET "+col+"="+data+" WHERE num=0",  function (error, rows, fields) { 
      if (error) 
      { 
       app.close(); 
      } 
     }); 
    }); 
}); 

app.listen(8080);** 

編輯:所以現在我知道我需要使用職位。我用express.js重寫了上面的代碼。我在網上看到的大多數示例都使用HTML表單,這很好,但我的項目需要通過AJAX請求發佈數據。有人能告訴我在node.js中如何解析數據嗎?

+2

數據的大容量通過POST請求發送最好的,特別是如果該請求導致修改數據庫,如GET請求旨在運行任意次數,而無需改變狀態 –

+0

所以很明顯我已經一直在做這個錯誤的方式。我怎樣才能將數據發佈到數據庫?順便說一下,我正在使用jQuery的內置ajax庫。 – Harangue

+0

使用'Express',而不僅僅是'http'模塊,它有一個叫做bodyparser的中間件,它可以讓你訪問POST請求的主體。在客戶端使用標準的'jQuery.post(url,data,callback)'來發布數據。 –

回答

1

您可以像這樣提取發佈數據。

if (req.method == 'POST') { 
    var body = ''; 
    req.on('data', function (chunk) { 
     body += chunk; 
    }); 
    req.on('end', function() { 
     var postData = body.toString(); 
     console.log(postData); 
    }); 
}