测试代码
function nodejs_post()
{
var x = new XMLHttpRequest();
x.onreadystatechange =function()
{
if(x.readyState == 4) {
if(x.status == 200) {
console.log("The server replied with: " + x.responseText);
txt.text = x.responseText;
}
}
};
var xxx =new Object;
var d="test.jpg"
console.log(typeof d)
x.open("POST","http://127.0.0.1:1234/hello",true);
x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
x.send("'"+d+"'");
}
Node.js:
var express = require('express');
var app = express();
app.get("/hello&:id&:name", function (req, res) {
var str = "";
for(key in req.params)
{
console.log(key)
console.log(req.params[key])
}
res.send("OK")
})
app.post("/hello", function (req, res) {
req.on("data", function (data) {
console.log("post返回数据:" + data);
res.send("服务器成功获取数据");
});
});
app.listen(1234, "127.0.0.1");
使用querystring
function nodejs_post()
{
var x = new XMLHttpRequest();
x.onreadystatechange =function()
{
if(x.readyState == 4) {
if(x.status == 200) {
console.log("The server replied with: " + x.responseText);
txt.text = x.responseText;
}
}
};
var xxx =new Object;
var d="test.jpg"
console.log(typeof d)
x.open("POST","http://127.0.0.1:1234/hello",true);
//post请求要自己设置请求头
x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
x.send("xxx="+d);
}
var express = require('express');
var query = require('querystring');
var app = express();
app.post("/hello", function (req, res) {
req.on("data", function (data) {
var bystring = data.toString();
console.log(bystring +","+typeof bystring);
console.log( data +","+typeof data );
var ret = query.parse(data);
var ret2 = query.parse(data.toString());
console.log(ret.xxx);
console.log(ret2.xxx);
});
});
app.listen(1234, "127.0.0.1");
输出结果:
xxx=test.jpg,string
xxx=test.jpg,object
undefined
test.jpg
query.parse必须传入string对象,因此ret2是正确的值
app.post("/hello", function (req, res) {
req.on("data", function (data) {
var bystring = data.toString();
var ret2 = query.parse(bystring);
console.log(ret2.xxx);
res.send("服务器成功获取数据" +ret2.xxx);
});
});
客户端接收到正确的数值了
使用json:
function nodejs_post()
{
var x = new XMLHttpRequest();
x.onreadystatechange =function()
{
if(x.readyState == 4) {
if(x.status == 200) {
console.log("The server replied with: " + x.responseText);
txt.text = x.responseText;
}
}
};
var xxx =new Object;
var d="test.jpg"
console.log(typeof d)
x.open("POST","http://127.0.0.1:1234/hello",true);
//post请求要自己设置请求头
x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xxx.d=d;
var sendobj =JSON.stringify(xxx);
x.send("xxx="+sendobj);
}
app.post("/hello", function (req, res) {
req.on("data", function (data) {
var bystring = data.toString();
var ret2 = query.parse(bystring);
console.log(ret2.xxx);
var obj = JSON.parse(ret2.xxx);
console.log(obj.d);
res.send("服务器成功获取数据" +obj.d);
});
});
服务端和客户端打印信息:
既然用了json 没有必要用querystring吧?修改下:
xxx.d=d;
var sendobj =JSON.stringify(xxx);
x.send(sendobj);
app.post("/hello", function (req, res) {
req.on("data", function (data) {
var obj = JSON.parse(data.toString());
console.log(obj.d);
res.send("服务器成功获取数据" +obj.d);
});
});
sendFile:发送文件
//Qt代码:
Image {
id: getbinimg
width: 200
height: 200
source: "http://192.168.0.105:1234/img/1.PNG" //加载的图片来自服务器请求
}
app.get("/img/:file", function (req, res) {
var options = {
root: __dirname + '/',
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
};
//如果只有一个参数 使用req.params.参数名
console.log(req.params.file)
res.sendFile(req.params.file, options, function (err) {
if (err) {
console.log(err);
res.status(err.status).end();
}
else {
console.log('文件发送成功');
}
});
})