问题描述
我在Node.js中使用标准的应用引擎配置。我无法使用xmlhttprequest从应用程序引擎访问ibm cloudant。
我用于来自App引擎的请求的代码如下:
var getAllDocuments = function(database,callback) {
var xhr = new XMLHttpRequest();
xhr.open("GET","<link>" + database + "/_all_docs?include_docs=true",false);
xhr.setRequestHeader("Authorization",myauthenticateUser(userName,passWord));
xhr.setRequestHeader("Content-Type","application/json");
xhr.onreadystatechange = function (){
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
callback(data,xhr.status);
}
else{
callback(null,xhr.status);
}
}
xhr.send();
}
执行上述代码时,发生以下错误-:错误:EROFS:只读文件系统,打开'.node-xmlhttprequest-sync-11'。
仅供参考:我没有在应用引擎中保存任何临时文件。
解决方法
该错误似乎是不言自明的:
错误:EROFS:只读文件系统,打开
.node-xmlhttprequest-sync-11
由于使用同步请求,因此这些文件被保存下来。请查看此similar question,在此它们启动“ nodemon”,它会继续创建文件.node-xmlhttprequest-sync-1516
(最后是随机数)。
另外,根据this,我发现:
从Gecko 30.0(Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27),Blink 39.0和Edge 13开始,主线程上的同步请求由于对用户体验的负面影响而被弃用。
同步XHR现在处于弃用状态。
因此,您可能会考虑将代码重组为使用异步。
我想搜索更多,但发现this entry in github issues
通常,如果您正在获取这些文件,则意味着您使用的是同步http请求,这是不可以。由于这种影响和其他原因,您不应该这样做。请检查您的代码中是否存在同步请求,然后将其删除。
如果您看到使用同步请求的Truffle代码,请告诉我们。
我认为this responds to your question:
仅供参考,此文件不是生成的松露。这是因为在节点中使用了同步的http请求。
解决方案:更改为异步请求。为此,您必须更改此行
xhr.open("GET","<link>" + database + "/_all_docs?include_docs=true",false);
为此:
xhr.open("GET",true);
将标志false
更改为 true
。有关更多详细信息,请查看this