@ranilbs

Как вернуть ответ в node js после отправки AT команды на шлюз?

//старуем сервер node.js и обрабатываем пост запрос
var http = require('http');
var port = 82;
var s = http.createServer();
s.on('request', function(request, response) {
    response.setHeader('Access-Control-Allow-Origin', '*');
    response.setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept');
    response.writeHead(200);
    console.log(request.method);
    console.log(request.headers);
    console.log(request.url);

    var data = '';
    //data это данные пришедшие с пост
    request.on('data', function(chunk) {
        data += chunk.toString();
    });
    request.on('end', function() {
        console.log(data);
//фильтруем пост запрос оставляем только значение
        var signal = 	data.replace("signal=","");
        var otvet="";
        if(otvet=  sendsms(sendsms(Number(signal)))){
            //возвращаем ответ
response.write(otvet);
response.end();
        }

    });

});
//обязательно
s.listen(port);

//функция отправки АТ команд
function sendsms(signal){
    var mraa = require('mraa'); //require mraa
    var uartdev = new mraa.Uart(0);
    var com = require('serialport');

// получим путь к UART
    var portName = uartdev.getDevicePath();//  '/dev/ttyMFD1';
    var serialPort = new com.SerialPort(portName, {
        baudrate: 115200,
        dataBits: 8,
        parity: 'none',
        stopBits: 1,
        flowControl: false
    });

    serialPort.on('open',function(){

        if(signal==1){
            serialPort.write('AT+QSIMSTAT\r\x1A');
        }
        if(signal==2){
            serialPort.write('AT+QNSTATUS\r\x1A');
        }
        if(signal==3){
            serialPort.write('AT+CSQ\r\x1A');
        }

        if(signal==4){
            serialPort.write('AT+COPS?\r\x1A');
        }

});

//функция ответа
    serialPort.on('data', function (data){
        global.dd= data.toString();
        console.log(dd);

    });

// функция выхода
    serialPort.on('close', function() {
        console.log("port closed.");
    });


// функция при ошибке
    serialPort.on('error', function(error) {
    console.log('port closed', error);

    });
// возвращаем ответ в виде строки обязательно srring

return global.dd;
//serialPort.close();
}


Здравствуйте! Я мало понимаю в nodejs но очень нужно выполнить одну задачу. Помогите пожалуйста. Я отправляю AT команды на шлюз. Но с получением ответа у меня проблемы. То лишние переносы строк появляются и в переменную выдает лишь часть ответа, то в переменную попадает значение предыдущего запроса. Я понимаю что код написан не верно. У меня return срабатывает раньше чем функция ответа.
  • Вопрос задан
  • 442 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Coder321
Так зделайте return в close ивенте
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы