【发布时间】:2012-11-04 11:44:57
【问题描述】:
我是 node.js 的新手。我正在处理的一个项目需要将一个大数组(625 个项目)作为字符串存储在 MySQL 数据库中,我正在使用 Node MySQL 来完成此操作。
现在我有它,以便在向“/(列名)?(值)”发出请求时更新行。不幸的是,很快就知道将 625 个项目作为字符串传递给节点并不是最有效的处理方式。
除了查询字符串之外,您对将大数组作为字符串传递的替代方法有什么建议吗?
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 中解析这些数据吗?
【问题讨论】:
-
大量数据最好通过 POST 请求发送,特别是如果该请求导致对数据库的修改,因为 GET 请求旨在在不改变状态的情况下运行任意次数
-
很明显我一直在用错误的方式解决这个问题。如何将数据发布到数据库?顺便说一句,我正在使用 jQuery 的内置 ajax 库。
-
使用
Express,而不仅仅是http模块,它有一个很好的中间件,叫做bodyparser,它可以让你访问POST请求的主体。在客户端使用标准jQuery.post(url, data, callback)发布数据。 -
如何使用 request.param(); 访问数据如果数据不是通过 HTML 表单发布的?
-
@J4G A
POST通过表单和 jQuery 发送产生相同的数据。
标签: javascript mysql node.js query-string