现在我有一个这样的问题: 我创建了一个带有node.js的服务器,并且服务器已经收到了ajax请求。使用从ajax收到的数据,node.js向另一个服务器发送一个post请求。现在我从另一台服务器获得数据,主要问题是如何将数据发送回ajax,我尝试了很多方法,但它不起作用。
有人可以帮我解决这个问题吗?
这是我的代码
==== ajax请求
$.ajax({
type: "POST",
url: 'http://localhost:8888', // 这里要改成服务器的地址
data: userData,
success: function (data) {
console.log(data);
}
})
====
http.createServer(function (req, res) {
if (req.url == '/') {
var data = '';
var imdata;
util.log(util.inspect(req));
util.log('Request recieved: \nmethod: ' + req.method + '\nurl: ' + req.url);
req.on('data', function (chunk) {
imdata = querystring.parse(data += chunk);//转成对象的格式
})
req.on('end', function () {
var myIm = new ServerApi('e782429e48cb99f44b9c5effe414ac72', 'b88b9f2a2f74');
myIm.createUserId(imdata, function (err, data) {
//createUesrId is a api to deal with post request
console.log(data);//the data have received from another server,and now i do not know how to return the data to ajax success function
})
})
====使用post requeset创建用户ID的api
ServerApi.prototype.postDataHttps = function (url, data, callback) {
this.checkSumBuilder();
var urlObj = urlParser.parse(url);
var httpHeader = {
'AppKey': this.AppKey,
'Nonce': this.Nonce,
'CurTime': this.CurTime,
'CheckSum': this.CheckSum,
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
'Content-Length': Buffer.byteLength(data)
};
var options = {
hostname: urlObj.hostname,
port: 80,
path: urlObj.path,
method: 'POST',
headers: httpHeader
};
var that = this;
var req = http.request(options, function (res) {
res.setEncoding('utf8');
console.log("statusCode: ", res.statusCode);
console.log("headers: ", res.headers);
res.on('data', function (chunk) {
if (Object.prototype.toString.call(callback) === '[object Function]') {
var result = JSON.parse(chunk);
callback.call(that, null, result);
return result;
}
});
});
var postData = querystring.stringify(data);
req.write(postData);
req.end(data);
req.on('error', function (err) {
if (Object.prototype.toString.call(callback) === '[object Function]') {
callback.call(that, err, null);
}
});
}
ServerApi.prototype.createUserId = function (data, callback) {
var url = 'https://api.netease.im/nimserver/user/create.action';
var postData = {
'accid': data['accid'] || '',
'name': data['name'] || '',
'props': data['props'] || '',
'icon': data['icon'] || '',
'token': data['token'] || ''
};
this.postDataHttps(url, postData, callback);
}
答案 0 :(得分:0)
在您的服务器代码上。 http.createServer(function (req, res) {...}
请注意您是如何获得req
和res
参数的?
因此,在事件end
上,即req.on('end' function...
就在您收到评论的行之后,说明了从其他服务器收到的数据',您可以执行以下操作:
res.writeHead(/*HTTP_RESPONSE_CODE_FOR_AJAX_CLIENT=*/200);
res.end('Done');
使用HTTP响应代码= 200向客户端发送响应,并且HTTP正文中的消息将“完成”。请注意,您可以使用响应对象执行许多操作,您可能需要查看文档以获取更多信息。
查看:强>
https://nodejs.org/api/http.html#http_response_writehead_statuscode_statusmessage_headers
OR (中文版)
http://nodeapi.ucdok.com/api/http.html#http_class_http_serverresponse_7847
中文快速解释:
在服务器的代码req.on('end'...
那里,你可以用res
对象打回给你的AJax客户端。