我对整个节点的东西还是相当陌生,所以如果这非常愚蠢,请原谅我,但是:
如果我调用node-mysqlquery()
客户端对象,我将无法再从我的 Web 应用程序 ( express ) 中获取请求对象的主体。
我需要用户身份验证的基本 POST / PUT 模式请求是:
_db_client = connect_to_db_server();
app.post("/some/path", function (req, res) {
_db_client.query("SELECT * FROM Users WHERE username = ?",
[ http_basic_auth.username ], function (err, results) {
if (err != null || resp == null) {
res.send("AUTH FAILURE: sorry, you can't do that", 403);
} else {
get_request_body(req, function (body) {
do_something();
res.send("yay, I'm happy", 200);
});
}
});
});
现在,问题是 get_request_body 函数永远不会回来。似乎它只是在请求对象上“被阻止”了。
这是一个示例程序:
var express = require('express'),
mysql = require('mysql');
var MySQLClient = mysql.Client;
var client = new MySQLClient();
client.user = 'root';
client.password = '';
client.connect(function(err, res) {
client.query("USE Gazelle", function (qerr, qresp) {
});
});
var app = express.createServer( );
app.use(express.bodyParser());
app.post("/test", function (req, res) {
client.query('SELECT * FROM Users', function (err, results) {
get_request_body(req, function (body) {
console.log("wooo");
console.log(body);
res.send("cool", 200);
});
});
});
app.listen(8080);
function get_request_body (req, callback) {
if (req.rawBody != undefined) {
callback(req.rawBody);
} else {
var data = '';
req.setEncoding('binary');
req.on('data', function(chunk) {
data += chunk;
});
req.on('end', function() {
callback(data);
});
}
}
诀窍:只有当我使用多部分表单 POST 数据而不是常规 POST 数据时,它才会失败:
curl -u un:pw -X POST -d ' { "cat" : "meow" }' http://localhost:8080/test
作品
curl -u un:pw -X POST -F "image_file=@test.jpg" http://localhost:8080/test
锁起来,永远不会回来。我在connect-form和multipart-js看到了同样的错误。现在有点难住了。
我是彻头彻尾的白痴吗?这不是正确的做事方式吗?