//старуем сервер 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 срабатывает раньше чем функция ответа.