无法使用xhr.open('post',url,true)查找文件URL-状态:404节点js

时间:2018-07-31 07:10:44

标签: node.js reactjs path xmlhttprequest

尝试通过XMLHttpRequest()上传图像时,在了解什么是通过xhr.open(...)访问文件的正确URL时遇到问题。

下面以this示例为例,说明服务器端代码和所有内容。

var xhr = new XMLHttpRequest();

  xhr.open('post','../../../../server/routes/saveImage.js',true);
  xhr.onload = function() {
    if(this.status ==200) {
      resolve(this.response);
    } else {
      reject (this.statusText);
    }
  };

Project目录是这样的

  • 项目
    • 客户
      • 应用
        • 组件
          • 产品
            • addproduct.js <-从此处调用xhr.open
    • 服务器
      • 路线
        • saveImage.js <-文件被调用

关于路径,请让我知道是否有更方便的方法来检查要在url中使用的访问路径或绝对路径。

2 个答案:

答案 0 :(得分:1)

我认为在许多层面上都有一个概念上的问题。

首先,当您使用XHRing(ajax)时,该URL表示您正在从CLIENT SIDE访问该URL。因此,假设您有一个应用程序和HTTP发布或获取了一个URL。您是否有来自客户端的文件?答案显然不是。 假设您将应用托管在以下位置:

http://localhost/myapps/app

因此,当您访问./someFile.txt../someFile.txt../../someFile.txt时,您实际上是在请求

./someFile.txt-> http://localhost/myapps/app/someFile.txt
../someFile.txt-> http://localhost/myapps/someFile.txt
../../someFile.txt-> http://localhost/someFile.txt 

现在,针对您的问题。您需要在某个地方托管 Server Side上传代码。该示例假定服务器端代码托管在例如http://localhost/upload中,并使用xhr.open('post','/upload',true);

您需要了解require ing或import ing或fs.readFile文件正在内部访问路径。但是,在托管应用程序时,任何客户端代码(例如Ajax(XHR))都从外部访问该URL。

答案 1 :(得分:0)

问题确实在于设置服务器端路由,这在很大程度上已经弄清楚了,这要归功于@Arkita的回答和@Kasper的评论。但是我继续寻找解决方案,该解决方案对其他人可能不是很有用,因为这首先是一个愚蠢的问题,但是在这里就可以了。

在客户端

xhr.open('post','/saveImage/save',true);

在服务器端,如果您使用的是Express.js或其他基于连接的框架

app.post('/saveImage/save',(req,res,next)=> {....})

我上面链接的示例可能也已过时,this似乎更有帮助。