我正在尝试使用Node.js开发一个简单的API,即时通讯在客户端使用XMLHttpRequest并且数据服务良好,但我无法为我的响应设置Response-Type标头。
所以客户端上的xhr对象上的Response-Type总是得到:
responseType:""
。
即使我设置:
res.writeHead(200, {'content-type':"application/javascript"});
在POST和GET情况下都会发生这种情况。
- 我的server.js:
var https = require('https'),
options = {
key : fs.readFileSync('key.pem'),
cert : fs.readFileSync('cert.pem')
},
server = https.createServer(options);
server.on('request', function (req, res) {
switch(req.method){
case "GET":
res.writeHead(200, {
'accept': '*/*',
'content-type': "application/javascript"
});
res.end('console.log("API GET Received")');
break;
case "POST":
res.writeHead(200, {
'content-type': "application/javascript"
});
req.on("data", function(data){
console.log(data.toString("utf8"));
});
res.end('console.log("API POST received")');
break;
case "PUT":
break;
case "DELETE":
break;
}
req.on('error', function(err) {console.log(err);});
return;
}
server.listen(443);
- 登录客户端的XHR对象:
...
readyState:4
response:'console.log("API POST received")'
responseText:'console.log("API POST received")'
responseType:"" //This should be: "application/javascript"
...
顺便说一下:
node -v: v6.5.0
npm --version: 3.10.6
任何建议?
谢谢!
答案 0 :(得分:2)
responseType
描述了(并且应该设置)response
属性的JavaScript数据类型:arraybuffer
,blob
, document
,json
或text
。你这里有文字;如果您希望将响应值解释为ArrayBuffer
或Blob
而不是文字,则需要在发送请求之前设置responseType
属性。
在任何情况下application/javascript
都不是responseType
属性的有效值。在这种情况下,您希望在response
属性中出现什么类型的JavaScript值?它已经是一个字符串。
如果您只想阅读客户端中的Content-Type
响应标头,请在请求完成后使用getReponseHeader
方法:
var contentTypeHeader = xhr.getReponseHeader("Content-Type");
答案 1 :(得分:0)
也许我不明白这个问题,但看起来程序在POST案例中没有写任何标题。
case "POST":
res.writeHead(200, {
});
应该读取类似
的内容 case "POST":
res.writeHead(200, {
'content-type': "application/javascript"
});
(或者可能在切换之前将其初始化)
答案 2 :(得分:0)
看起来您只在GET请求上设置标头,而不是在POST上。
这可能是问题吗?