TypeError: невозможно деструктурировать свойство queryResult из undefined или null - PullRequest
0 голосов
/ 04 августа 2020

У меня в консоли сервера появляется следующее сообщение об ошибке.

свойство queryResult undefined или null. TypeError: не удается

Мой код ниже

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();
    })
  }

Может ли кто-нибудь помочь мне, как решить проблему.

1 Ответ

1 голос
/ 04 августа 2020

Перед деструктуризацией объекта внимательно проверьте, является ли он 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...