使用NodeJS提供内容,但responseType始终为“”

时间:2016-09-01 19:47:13

标签: javascript node.js api server

我正在尝试使用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

任何建议?

谢谢!

3 个答案:

答案 0 :(得分:2)

responseType描述了(并且应该设置response属性的JavaScript数据类型:arraybufferblobdocumentjsontext。你这里有文字;如果您希望将响应值解释为ArrayBufferBlob而不是文字,则需要在发送请求之前设置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上。

这可能是问题吗?