chrome APP - node.js - PUT正在运行,但Chrome表示不是

时间:2013-08-18 20:37:25

标签: node.js debugging google-chrome-app

我正在localhost上的chrome应用程序发出针对node.js后端的PUT。 PUT的内容最终通过fs.writeFile发送到磁盘,所以如果我看到文件被创建,我知道导致该创建的事件链,该链必须包含一个成功的PUT。 PUT仅在成功的OPTIONS请求和我对该请求的响应后发生。

在chrome调试器中,我始终看到每个PUT都有以下内容:

XMLHttpRequest cannot load http://localhost:4000/home/bill/POS/Kitchen.130818.135938.002.T1. Origin chrome-extension://cenckmcibjncgjbokklgfkldnikknleb is not allowed by Access-Control-Allow-Origin. 

这是在根据调试器成功完成OPTIONS请求之后。 http是我的PUT并指定最终保存到磁盘的文件名。该消息使其听起来像是一个GET操作。我知道它是一个PUT,文件确实最终在磁盘上,所以我在node.js服务器中的PUT逻辑正在完成它的工作,我返回200状态。在调试器中,PUT状态被“取消”,就好像OPTIONS请求不允许它一样。这是不正确的。它显然已经完成,否则我就不会在磁盘上有文件。

这里有点断开连接。我想弄清楚在哪里。出了点问题,但我看不到它。

这是node.js服务器中的相关逻辑:

  case 'PUT':
     if (path.dirname(req.url) === systemPath) {
        buffer = '';
        req.on('data', function (data) {
           buffer += data;
        });
        req.on('end', function () {
           res.writeHead(200);
           res.end();
           fs.writeFile(req.url, buffer, function(error) {
              if (error) {throw error;}
           });
        });
     } else {
        console.log('Invalid Directory in URL - ' + req.url);
        res.writeHead(404);
        res.end('Invalid Directory in URL - ' + req.url);
     }
     break;
  case 'OPTIONS':
     res.writeHead(200, {'Access-Control-Allow-Methods': 'OPTIONS, TRACE, GET, HEAD, POST, PUT',
                         'Access-Control-Allow-Headers': 'content-type',
                         'Access-Control-Allow-Origin': '*'});
     res.end();
     break;

1 个答案:

答案 0 :(得分:0)

为什么不完全抛弃CORS并在清单中添加对localhost的权限?

另外,请查看AJAX request failing even though CORS headers are present,其中概述了一个非常类似的问题。

显然,来自localhost的CORS请求存在问题。也许有类似的问题,请求来自chrome-extension:// ...

抱歉,我没有更明确的答案!