संपादित करें: ने थोड़ा और कोड जोड़ा।

    const express = require('express');
    var bodyParser = require('body-parser');
    const app = express();

    var urlencodedParser = bodyParser.urlencoded({extended: false})

    const {google} = require('googleapis');
    const {PubSub} = require('@google-cloud/pubsub');
    const iot = require('@google-cloud/iot');
    const API_VERSION = 'v1';

    const DISCOVERY_API = 'https://cloudiot.googleapis.com/$discovery/rest';
    app.get('/', urlencodedParser, (req, res) => {

    const projectId = req.query.proyecto;
    const cloudRegion = req.query.region;
    const registryId = req.query.registro;
    const numSerie = req.query.numSerie;
    const command = req.query.command;

    const client = new iot.v1.DeviceManagerClient();
    if (client === undefined) {
        console.log('Did not instantiate client.');
    } else {
        console.log('Did instantiate client.');
        sendCom();
    }

    async function sendCom() {
        const formattedName = await client.devicePath(projectId, cloudRegion, registryId, numSerie)
        const binaryData = Buffer.from(command);
        const request = {
            name: formattedName,
            binaryData: binaryData,
        };
        return client.sendCommandToDevice(request).then(responses => res.status(200).send(JSON.stringify({
            data: OK
        }))).catch(err => res.status(404).send('Could not send command. Is the device connected?'));
    }
});

const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
    console.log(`App listening on port ${PORT}`);
    console.log('Press Ctrl+C to quit.');
});

module.exports = app;

मेरे पास यह फ़ंक्शन है, जिसे मैं क्लाइंट आरंभ करने के बाद कॉल करता हूं: sendCom ();

     async function sendCom() {
        const formattedName = await client.devicePath(projectId, cloudRegion, registryId, deviceId)
        const binaryData = Buffer.from(command);            
        const request = { name: formattedName, binaryData: binaryData, };

        client.sendCommandToDevice(request)
        .then(responses => {
            res.status(200).send(JSON.stringify({ data: OK })).end();                
        })
        .catch(err => {
            res.status(404).send('Could not send command. Is the device connected?').end();             
        });
    }

मेरी समस्या यह है कि sendCommandToDevice पूरी तरह से निष्पादित हो जाता है, हालांकि मुझे पकड़ त्रुटि मिलती है। जैसा कि मैं इसे समझता हूं, ऐसा इसलिए है क्योंकि .फिर में कनेक्शन समाप्त हो जाता है।

मैंने यह देखा है और यही मैंने कोशिश की है, हालांकि मैंने मुझे यकीन नहीं है कि मैं समझ रहा हूं कि क्या हो रहा है।

1
1x2x3x4x 6 अप्रैल 2020, 11:42
1
आप res.status.... का उपयोग कर रहे हैं जबकि आपके लैम्ब्डा को responses मिलता है। res कहां से आया है?
 – 
Omri Attiya
6 अप्रैल 2020, 11:48
इसके app.get('/', urlencodedParser, (req, res) => {} में मैंने ऊपर जो कोड पोस्ट किया है वह यहां है।
 – 
1x2x3x4x
6 अप्रैल 2020, 12:03
हाँ, जैसा कि मैंने कहा, मुझे लगता है कि यही समस्या है। लेकिन मुझे यकीन नहीं है कि मुझे कहां या कैसे करना चाहिए .end()?
 – 
1x2x3x4x
6 अप्रैल 2020, 12:04
खैर इस मामले के लिए आपको .end() पर कॉल करने की आवश्यकता नहीं है क्योंकि कोई बफर नहीं है जिसे आप प्रतिक्रिया भेजने के लिए बना रहे हैं और साथ ही @OmriAttiya res.status के बारे में सही है, यह प्रतिक्रिया होनी चाहिए। स्थिति ...
 – 
Farrukh
6 अप्रैल 2020, 12:19
मैंने पोस्ट को अधिक व्यापक कोड के साथ अपडेट किया है, अगर इससे मदद मिलती है। आपने और ओमरीअत्तिया ने जो कहा था, मैं बदल गया हूं। अभी भी कोई सफलता नहीं है।
 – 
1x2x3x4x
6 अप्रैल 2020, 12:28

2 जवाब

आप send का उपयोग end के साथ नहीं कर सकते।

  • end() का उपयोग तब किया जाता है जब आप अनुरोध समाप्त करना चाहते हैं और बिना डेटा के जवाब देना चाहते हैं।

  • send() का उपयोग अनुरोध को समाप्त करने और कुछ डेटा के साथ प्रतिक्रिया करने के लिए किया जाता है।

आप इसके बारे में यहां अधिक जानकारी प्राप्त कर सकते हैं।

0
ziishaned 6 अप्रैल 2020, 12:08
धन्यवाद। मैंने हटा दिया .end() हालांकि मुझे एक ही समस्या का सामना करना पड़ता है। यहां तक ​​​​कि अगर प्रयास सफल होता है और SendCommandToDevice काम करता है, तब भी मुझे पकड़ के रूप में मिलता है।
 – 
1x2x3x4x
6 अप्रैल 2020, 12:15

आपकी विधि sendCom को वह responses लौटाना चाहिए जो आपको .then() में मिलता है और साथ ही end() को कॉल नहीं करना चाहिए:

// your code...
return client
  .sendCommandToDevice(request)
  .then(responses => responses.status(200).send(JSON.stringify({ data: OK })))
  .catch(err => console.error(err)); // do something with err
0
Yosvel Quintero Arguelles 6 अप्रैल 2020, 12:24
धन्यवाद। मैंने आपकी सलाह का पालन करने की कोशिश कर रहे प्रश्न को अपडेट किया और मुझे किसी कारण से वही परिणाम मिला। मेरे डिवाइस को कमांड मिलने के बाद से कैच निष्पादित होता है लेकिन मुझे त्रुटि भी मिलती है।
 – 
xxxxxxxxxxxxx
6 अप्रैल 2020, 12:30
क्या आप लॉग जोड़ सकते हैं
 – 
Ayman Arif
6 अप्रैल 2020, 15:41