Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 如果在函数中的任何位置使用,则云函数请求显示未定义,但如果您只是通过控制台记录它们,它们将正常运行_Javascript_Firebase_Google Cloud Functions - Fatal编程技术网

Javascript 如果在函数中的任何位置使用,则云函数请求显示未定义,但如果您只是通过控制台记录它们,它们将正常运行

Javascript 如果在函数中的任何位置使用,则云函数请求显示未定义,但如果您只是通过控制台记录它们,它们将正常运行,javascript,firebase,google-cloud-functions,Javascript,Firebase,Google Cloud Functions,所以这是一个非常奇怪的问题,我已经修补了一段时间,似乎无法弄清楚这里到底发生了什么,哈哈。我有一个firebase函数,我用它从craigslist获取一些数据,然后返回并响应。我使用request发送我需要在cloud函数中搜索的一些值 exports.clSearch = functions.https.onRequest((request, response) => { console.log(request.body.keyword); console.log(reque

所以这是一个非常奇怪的问题,我已经修补了一段时间,似乎无法弄清楚这里到底发生了什么,哈哈。我有一个firebase函数,我用它从craigslist获取一些数据,然后返回并响应。我使用request发送我需要在cloud函数中搜索的一些值


exports.clSearch = functions.https.onRequest((request, response) => {
  console.log(request.body.keyword);
  console.log(request.body.city);

  let client = new craigslist.Client({
    city: "seattle",
  });

  options = {
    category: "vga",
    maxPrice: "500",
    minPrice: "100",
  };

  client
    .search(options, "xbox one")
    // eslint-disable-next-line promise/always-return
    .then((listings) => {
      // play with listings here...
      response.setHeader("Access-Control-Allow-Origin", "*");
      response.setHeader("Access-Control-Allow-Methods", "*");
      response.setHeader("Access-Control-Allow-Headers", "*");

      response.send(listings);
    })
    .catch((err) => {
      console.error(err);
    });
});

因此,当我运行上面的函数时,控制台会记录请求作为正确的值通过,并且一切都会正常运行。现在看看下面这个:

exports.clSearch = functions.https.onRequest((request, response) => {
  console.log(request.body.keyword);
  console.log(request.body.city);

  let client = new craigslist.Client({
    city: request.body.city,
  });

  options = {
    category: "vga",
    maxPrice: "500",
    minPrice: "100",
  };

  client
    .search(options, request.body.keyword)
    // eslint-disable-next-line promise/always-return
    .then((listings) => {
      // play with listings here...
      response.setHeader("Access-Control-Allow-Origin", "*");
      response.setHeader("Access-Control-Allow-Methods", "*");
      response.setHeader("Access-Control-Allow-Headers", "*");

      response.send(listings);
    })
    .catch((err) => {
      console.error(err);
    });
});
现在我所做的基本上就是在函数中使用这些请求值,而不仅仅是记录它们。但是,当我这样做时,由于控制台日志中的某些原因,它会导致请求通过未定义。为什么仅仅在函数中使用这些请求值会导致请求通过未定义的路径

即使我只是加上

let keyword = request.body.keyword;

在控制台日志下面,它会导致上面的控制台日志返回为未定义。但是如果我只在开始时通过控制台日志调用request.body.keyword/request.body.city,那么它们完全可以通过。只有当我将它们添加到函数中的任何其他位置时,它才会导致所有内容都返回未定义状态。这简直毫无意义

这就是我向函数发送请求的方式


  handleSearch = () => {
    var xhr = new XMLHttpRequest();

    xhr.addEventListener("readystatechange", function () {
      if (this.readyState === this.DONE) {
        console.log(this.responseText);
      }
    });

    xhr.open(
      "POST",
      "https://*****.cloudfunctions.net/clSearch"
    );
    xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    xhr.send(
      JSON.stringify({
        keyword: "xbox",
        city: "orlando",
      })
    );
  };

虽然我不认为这是问题的一部分,但无论如何,如果我错了,我会证明这一点

希望你们中的一个超级聪明的家伙能明白这一点,或者其他人也经历过这一点,可以帮助lol

即使我这样做

  let data = request;
  let rKey = data.body.keyword;
  let rCity = data.body.city;
  console.log(rCity);
  console.log(rKey);

这两个控制台日志将作为正确的值返回。但如果我只是简单地给

  let client = new craigslist.Client({
    city: rCity,
  });

然后,两个控制台日志显示rCity和rKey的值未定义,即使它们完全正确地记录了正确的值,直到我尝试使用下面的值为止。这毫无意义。

这是由节点模块node craigslist造成的,操那个节点模块=D,简单地使用一个新模块就解决了这个问题。

这是由节点模块node craigslist造成的,操那个节点module=D,简单地使用一个新模块就解决了这个问题。

我注意到您正在将CORS头设置为这个云函数响应的一部分。您能否澄清此云功能是否同时处理POST请求和飞行前CORS选项请求?如果是后者,就不会有尸体。可能您看到的是选项请求中的日志。您能否确认,每当日志显示
未定义时,请求方法实际上是POST而不是OPTIONS?因此,基本上,此云函数接受请求,使用它获取城市和关键字的值,然后在响应中返回响应中“listings”的值。我在函数中设置了cors头,因为它在响应中返回内容,并且在没有设置的情况下我似乎会出错。另外,如果我只在控制台上记录它,它的工作完全正常,但是如果我尝试将它分配给变量或任何东西,它会使它在控制台日志上返回未定义的状态。这很奇怪。还有一个问题是请求而不是响应,数据通过响应发送回的很好,所以我不认为这是问题所在。我注意到您正在将CORS头设置为此云函数响应的一部分。您能否澄清此云功能是否同时处理POST请求和飞行前CORS选项请求?如果是后者,就不会有尸体。可能您看到的是选项请求中的日志。您能否确认,每当日志显示
未定义时,请求方法实际上是POST而不是OPTIONS?因此,基本上,此云函数接受请求,使用它获取城市和关键字的值,然后在响应中返回响应中“listings”的值。我在函数中设置了cors头,因为它在响应中返回内容,并且在没有设置的情况下我似乎会出错。另外,如果我只在控制台上记录它,它的工作完全正常,但是如果我尝试将它分配给变量或任何东西,它会使它在控制台日志上返回未定义的状态。这很奇怪,而且是有问题的请求而不是响应,数据通过响应发送回的很好,所以我不认为这是问题所在。