【问题标题】:Using NodeJS for serving content, but responseType is always ""使用 NodeJS 提供内容,但 responseType 始终为 ""
【发布时间】:2016-09-02 04:16:34
【问题描述】:

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

有什么建议吗?

谢谢!

【问题讨论】:

    标签: javascript node.js api server


    【解决方案1】:

    responseType 描述(并且应该由您设置response 属性的 JavaScript 数据类型:arraybufferblobdocumentjson、或text。你在这里有文字;如果您希望将响应值解释为 ArrayBufferBlob 而不是文本,则需要在发送请求之前设置 responseType 属性。

    在任何情况下,application/javascript 都不是 responseType 属性的有效值。在这种情况下,您希望 response 属性中出现什么类型的 JavaScript 值?已经是字符串了。

    如果你只想在客户端读取Content-Type响应头,在请求完成后使用getReponseHeader方法:

    var contentTypeHeader = xhr.getReponseHeader("Content-Type");
    

    【讨论】:

      【解决方案2】:

      也许我不明白这个问题,但看起来程序在 POST 案例中没有写任何标题。

        case "POST":
             res.writeHead(200, {
             });
      

      应该读类似

         case "POST":
             res.writeHead(200, {
                 'content-type': "application/javascript"
             });
      

      (或者可能在切换之前对其进行初始化)

      【讨论】:

      • 这是我在此处粘贴代码时的错误抱歉...已编辑,谢谢!
      【解决方案3】:

      看起来您只在 GET 请求上设置标头,而不是在 POST 上。

      这可能是问题吗?

      【讨论】:

      • 这是我在此处粘贴代码时的错误抱歉...已编辑,谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      相关资源
      最近更新 更多