Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试在异步云函数(节点v8)内执行fs.writefile()_Javascript_Node.js_Firebase_Async Await_Google Cloud Functions - Fatal编程技术网

Javascript 尝试在异步云函数(节点v8)内执行fs.writefile()

Javascript 尝试在异步云函数(节点v8)内执行fs.writefile(),javascript,node.js,firebase,async-await,google-cloud-functions,Javascript,Node.js,Firebase,Async Await,Google Cloud Functions,我目前正在构建一个云功能,从电子商务网站上获取一些数据。我在Node.js v8环境中运行它们,因此我可以使用async/await而无需传输 我需要一种方法来保存一个文件的html响应从网站,所以我可以检查它,并决定如何最好地刮它。但我没能让它工作 正如我在许多地方发现的重新归档一样,我需要一种方法来提示fs.writeFile()函数,以便等待它。我尝试了使用util.promisify并在下面构建了自定义函数(两者都会产生相同的结果,当我等待结果时,我的云函数崩溃了): index.js(

我目前正在构建一个云功能,从电子商务网站上获取一些数据。我在Node.js v8环境中运行它们,因此我可以使用
async/await
而无需传输

我需要一种方法来保存一个文件的html响应从网站,所以我可以检查它,并决定如何最好地刮它。但我没能让它工作

正如我在许多地方发现的重新归档一样,我需要一种方法来提示
fs.writeFile()
函数,以便
等待它。我尝试了使用
util.promisify
并在下面构建了自定义函数(两者都会产生相同的结果,当我
等待结果时,我的云函数崩溃了):

index.js(云函数的主文件-简化版)

下面是我的客户端得到的:错误消息只是
internal
,因为云函数避免将内部错误详细信息传递给客户端


注意4:我还没有部署该功能。这一切都是本地开发。

我相信您不允许在Firebase函数上写入文件系统。尝试写入
/tmp
,请参阅


但是我认为您不应该编写
响应.html
,而应该在Firebase函数返回的响应中设置文本和状态代码。

我已经成功地做到了

根据
os.tmpdir()
函数的代码只能写入一个目录。

下面的步骤也是如此,现在它可以工作了:

index.js

const fs = require('fs');
const os = require('os');
const path = require('path');
const tmpdir = os.tmpdir();
const filePath = path.join(tmpdir,'response.html');

// PROMISIFY WRITEFILE TO SAVE URL RESPONSE
const promisifiedWriteFile = function(text) {
  return new Promise((resolve, reject) => {
    fs.writeFile(filePath, text, err => {
      if (err) {
        return reject(err);
      }
      return resolve();
    });
  });
};
从我调用的函数内部:

wait promisifiedWriteFile(response.body)

在此链接上还找到一些相关文档:


您可以共享错误消息吗?共享您收到的错误,并使用promisified fs方法,而不是手动包装,或者使用bluebird的Promisifly或使用npm fs-extrafs\u Promissions\u api在节点中不可用8@Stanimirovv刚刚添加了错误详细信息。@AZ_u刚刚添加了错误详细信息。我会检查的。“os.tmpdir()只有一个目录是可写的”。突出这一点!你救了我的命!
// THIS IS WHAT LOGS OUT OF MY FUNCTION
info: User function triggered, starting execution
info: Execution took 2034 ms, finished with status: 'crash'
const fs = require('fs');
const os = require('os');
const path = require('path');
const tmpdir = os.tmpdir();
const filePath = path.join(tmpdir,'response.html');

// PROMISIFY WRITEFILE TO SAVE URL RESPONSE
const promisifiedWriteFile = function(text) {
  return new Promise((resolve, reject) => {
    fs.writeFile(filePath, text, err => {
      if (err) {
        return reject(err);
      }
      return resolve();
    });
  });
};