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函数中的未定义/空变量_Javascript_Node.js_Function_Variables - Fatal编程技术网

Javascript函数中的未定义/空变量

Javascript函数中的未定义/空变量,javascript,node.js,function,variables,Javascript,Node.js,Function,Variables,我对以下代码有一些问题。我有一个api可以获取不同的URL。根据我拥有的URL,操作会有所不同,所以我做了一个函数来检测我要对其进行操作的站点。现在看起来是这样的: router.get('/:url(*)', async function (req, res) { let jsonObject; jsonObject= await chooseScrapperFromUrl(req.params.url); res.json(jsonObject

我对以下代码有一些问题。我有一个api可以获取不同的URL。根据我拥有的URL,操作会有所不同,所以我做了一个函数来检测我要对其进行操作的站点。现在看起来是这样的:

router.get('/:url(*)', async function (req, res) {

       let jsonObject;

       jsonObject= await chooseScrapperFromUrl(req.params.url);

       res.json(jsonObject);
}

async function chooseScrapperFromUrl(url) {

    let jsonObject= '';

    if (url.includes('www.someSite.com')) {
        jsonObject= await someSiteScrapper(url);
    }

    return jsonObject;

}

async function someSiteScrapper(url) {
      let jsonObject= '';

      try {
              //creating the jsonObject variable here ...
              //jsonObject = //some cheerio calls here but nothing more
        request(url, (error, response, html) => {
        if (!error && response.statusCode == 200) {

            const $ = cheerio.load(html);

            $('.pb-center-column').each((i, el) => {
                const productName= $(el).find('#something').find('span').text().replace(/\s\s+/g, ' ').trim();
                jsonObject+= '{ "name": "' + productName;

                let price= $(el).find('.price').text().trim();

                jsonObject+= '"price": ' + parseFloat(price) + ', ';

            jsonObject+= '"originUrl": "' + url + '"}';
      } catch (err) {
        console.log(err);
      }

      return jsonObject;
}
您可以看到,我拥有的变量
jsonObject
是在
somesitescarser
函数中创建的,应该返回到我的路由,它将发送到我的前端客户端。我进行了检查,并在
try
/
catch
循环中创建了
jsonObject
,但一旦我退出循环,它将为空或
未定义。我不明白为什么


你能帮我吗?

试着答应一下。。。这是因为您在更改之前返回了值

async function someSiteScrapper(url) {
      return new Promise((resolve, reject) => {
      let jsonObject= '';

      try {
              //creating the jsonObject variable here ...
              //jsonObject = //some cheerio calls here but nothing more
        request(url, (error, response, html) => {
        if (!error && response.statusCode == 200) {

            const $ = cheerio.load(html);

            $('.pb-center-column').each((i, el) => {
                const productName= $(el).find('#something').find('span').text().replace(/\s\s+/g, ' ').trim();
                jsonObject+= '{ "name": "' + productName;

                let price= $(el).find('.price').text().trim();

                jsonObject+= '"price": ' + parseFloat(price) + ', ';

                jsonObject+= '"originUrl": "' + url + '"}';
            });

            resolve(jsonObject);
      } catch (err) {
        reject(err);
      }


      });
}

试着承诺。。。这是因为您在更改之前返回了值

async function someSiteScrapper(url) {
      return new Promise((resolve, reject) => {
      let jsonObject= '';

      try {
              //creating the jsonObject variable here ...
              //jsonObject = //some cheerio calls here but nothing more
        request(url, (error, response, html) => {
        if (!error && response.statusCode == 200) {

            const $ = cheerio.load(html);

            $('.pb-center-column').each((i, el) => {
                const productName= $(el).find('#something').find('span').text().replace(/\s\s+/g, ' ').trim();
                jsonObject+= '{ "name": "' + productName;

                let price= $(el).find('.price').text().trim();

                jsonObject+= '"price": ' + parseFloat(price) + ', ';

                jsonObject+= '"originUrl": "' + url + '"}';
            });

            resolve(jsonObject);
      } catch (err) {
        reject(err);
      }


      });
}

实际上什么是治疗?也许你在里面使用了king和async函数,但是你在值受到影响之前返回了值…我做了建议的编辑,治疗中只有cheerio调用,这都是错的,重要的是你正在做的请求。。。它是异步的……实际上什么是治疗?也许你在里面使用了king和async函数,但是你在值受到影响之前返回了值…我做了建议的编辑,治疗中只有cheerio调用,这都是错的,重要的是你正在做的请求。。。它是异步的。。。。