【问题标题】:TypeError: Cannot destructure property `queryResult` of 'undefined' or 'null'TypeError:无法解构“未定义”或“空”的属性“queryResult”
【发布时间】:2020-08-04 02:31:35
【问题描述】:

我在服务器控制台中有以下错误消息。

“未定义”或“空”的属性queryResult。类型错误:不能

我的代码在下面

invoke:async (conversation, done) => {
        // Get query from incoming message
        const text = conversation.text();
        var query = conversation.properties().query;
        conversation.logger().info('Query '+query );
       
        
        // Set modules
        const soapRequest = require('easy-soap-request');
        const path = require('path');
        const fs = require('fs');
        const xml2js = require('xml2js');
        const { match } = require('assert');
        
        //SOAP URL
        const url = 'https://cap.zudo.com/ws/apf/ticketing/MOS?WSDL';
        
        //Set headers
        const sampleHeaders = {
            'user-agent': 'sampleTest',
            'Content-Type': 'application/xml;charset=UTF-8',
            };
            
        const filenameIn = path.join(__dirname, '/request.txt');
        const filenameOut = filenameIn
        
        //Replace Query variable inside request.txt fileContent
        var REGEX = /<TKT:ProjectNum>(.+)<\/TKT:ProjectNum>/;
        var fileContent = fs.readFileSync(filenameIn, 'utf8');
        fileContent = fileContent.replace(
            REGEX,
            '<TKT:ProjectNum>' + query + '</TKT:ProjectNum>'
       );
    
        //Write the query
        fs.writeFileSync(filenameOut, fileContent, 'utf8');

        const xml = fs.readFileSync(path.join(__dirname, '/request.txt'), 'utf-8');
        
        //Callback
        let { queryResult } =  await soapRequest({ url: url, headers: sampleHeaders, xml: xml, timeout: 10000}).then(results => {
            return results;
            
        }).catch(e => {
            conversation.logger().info("ERROR "+e);
            conversation.reply(e).transition('NOK').keepTurn(true);
            done();
        });
        
        
        let { headers, body, statusCode } = await  queryResult ;

        xml2js.parseString(body,{ mergeAttrs: true }, (err, result) => {
                    if(err) {
                        conversation.logger().info("ERROR "+err);
                        conversation.reply(e).transition('NOK').keepTurn(true);
                              done();
                    }        
        
        conversation.logger().info("res: "+result);
        
        conversation.reply(result).transition('OK').keepTurn(true);
        done();
    })
  }

谁能帮我解决这个问题。

【问题讨论】:

    标签: javascript node.js soap


    【解决方案1】:

    在解构一个对象之前,请仔细检查它是undefined还是null

    const res = await soapRequest({ url: url, headers: sampleHeaders, xml: xml, timeout: 10000 }).then(results => {
        return results;
    
    }).catch(e => {
        conversation.logger().info("ERROR " + e);
        conversation.reply(e).transition('NOK').keepTurn(true);
        done();
    });
    
    if (res === undefined || res === null) {
        // do something when res is undefined or null
    } else {
        const { queryResult } = res; // safely destructure res now
        // further processing...
    }
    
    

    您的代码中还有一个错误:

    let { headers, body, statusCode } = await queryResult;
    

    queryResult 不是一个函数,你不需要和它一起使用await

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 2021-03-21
      • 2020-01-21
      • 2020-05-28
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 2019-07-15
      • 2020-01-24
      相关资源
      最近更新 更多