我对此很新,我不明白为什么我的脚本没有从html加载......这是我的主要问题。


比,我想获得可用COM端口的列表并将内容发送到可用端口。我安装了serialport v 6.1.1。我创建了带标签的index.html,但似乎没有工作(加载)。当这工作时,我想在html上获取表单以获取并将数据(输入文本)传递给received.js。 js文件中可能存在错误但无法判断,因为没有加载任何脚本。


控制台返回错误:

&#xA ; SyntaxError:期望表达式,得到'<' [了解更多] index.js:1
 SyntaxError:期望表达式,得到'<' [了解详情] received.js:1



 起点是server.js:


 var http = require('http');
 var fs = require('fs');
 var http_IP ='127.0.0.1';
 var http_port = 9876;

 //生成html
函数onRequest(请求,响应){
 responce.writeHead(200,{'Content-type':'text / html'});
 fs.readFile('。/ index.html',null,function(error,data){
 if(error){
 responce.writeHead(404);
 responce.write('文件未找到');
} else {
 responce.write(data);
}
 responce.end();
});
 
}

 http.createServer(onRequest).listen(http_port);
 console.log('侦听http://'+ http_IP +':'+ http_port) ;



 index.js(也不是提醒或控制台正在打印消息)


 console.log(“Hello”);
 alert('Hello');

 var serialport = require('serialport');

 // list serial ports:
 serialport.list(function(err,ports){
 ports.forEach(function(port){
 console.log(port.comName);&#xA ;
});
});

 serialport.list((错误,端口)=> {
 console.log('端口',端口) ;
 if(错误){
 document.getElementById('error')。textContent = err.message
 return
} else {
 // var port = new serialport( ““FTDIBUS \ VID_0403 + PID_6 001 + FT9PQV36A \ 0000“',{baudRate:115200})
 document.getElementById('error')。textContent = message
 }

 if(ports.length === 0){
 document.getElementById('error')。textContent ='没有发现端口'
 }

 const headers = Object.keys(ports [0])
 const table = createTable(headers)
 tableHTML =''
 table.on('data',data => tableHTML + = data)
 table.on('end',()=> document.getElementById('ports')。innerHTML = tableHTML)
 ports.forEach(port => table.write(port))
 table.end();

});
 代码>


 的index.html
&#XA ;
 <!DOCTYPE html>
< html lang =“en”>
< head>
 < meta charset =“utf-8”>
 < meta name =“viewport”content =“width-device-width,initial-scale = 1.0”>< />
 < meta http-equiv =“X_UA-Compatible”content =“ie = edge”>< />
 < title>我的串行端口v1< / title>
< / head>
< body>
 < h3 id =“h3”> Serial Port v1< / h3>

 < FORM class =“form”NAME =“myform”ACTION =“”METHOD =“POST”onsubmit =“return false”>输入要处理的命令(不带“()”):< BR>
 < INPUT TYPE =“text”NAME =“inputbox”id =“inputbox”VALUE =“”>
 < INPUT TYPE =“button”NAME =“button”id =“send_button”Value =“Click”onClick =“”>
 < / FORM>

 < script type“text / javascript”src =“index.js”>< / script> 

 < script src =“received.js”>
 < /脚本>


< / BODY>
< / HTML>
 代码>

&#XA ; received.js


 const serialport = require('serialport');

 var ready ='';& #xA;

 const portName ='COM20';
 var port = new serialport(portName,{parser:serialport.parsers.readline('\ r \ n'),baudRate:19200 }&;


 // **** SENDING

 port.open(function(err){
 if(err){&#xA ; return console.log('错误打开端口:',err.message);
}


 var button = document.getElementById('send_button');&#xA ; var form = document.getElementsByName('myform');
 console.log(“”)

 // var value ='';

 //处理html表单
 button.onclick = function myFormHandler(){

 var value = button.form.inputbox.value;

 console.log('输入值: ',value);
 //存储输入的值
 localStorage.setItem('command_value',value);
 command_optics = value;
 console.log('Value o f值',值);
 console.log('command_optics的值',command_optics);
 //回忆输入值
 var command_optics = localStorage.getItem('command_value');
 console.log('command_optics:',command_optics);
 //从之前的输入中清除本地存储
 localStorage.clear()
 //发送命令输入到表单文本框
 var sent_data ='('+ command_optics.toUpperCase()+')\ r \ n';
 var received_raw_data;

 //通过COM端口发送数据
 port.write(sent_data,function(err){
 if(err){
 return console.log('write on write',err.message);
}
 console .log('Port.write:',sent_data);
}
);
 }

 // **** RECEIVING

 //从COM端口接收数据
 port.on('data',function(data){

 //传递给var received_raw_data的原始数据,用于在html&#xA中显示; received_raw_data = data;

 //修剪'C:','R:','L:'来自字符串
 // data = data.replace('CRL:','')
 if(data.length> 50){ 
 data = data.slice(2);
}

 console.log('Data received(raw):',data);
 // document。 getElementById('data_from_optics')。textContent = data
 //将数据从光学模块写入html
 document.getElementById('data_from_optics')。textContent = received_raw_data;
});
& #xA; //读取可用数据但保持流不进入“流动模式”
 port.on('readable',function(){
 console.log('Data2:',port.read());
});

}); 
 代码>


答案 0 :(得分:1)
查看您的HTTP服务器:
function onRequest(request, responce){ responce.writeHead(200,{'Content-type': 'text/html'}); fs.readFile('./index.html', null, function(error, data){ if(error){ responce.writeHead(404); responce.write('File not found'); }else{ responce.write(data); } responce.end(); }); }
因此...
index.js
index.html
您需要注意浏览器要求的文件,并向他们提供,而不是总是发送index.html
。
由于您发送的是HTML而不是JavaScript,因此当它在HTML开头看到<
并尝试将其视为JavaScript时会引发错误。
然后查看index.js
...
alert('Hello'); var serialport = require('serialport');
alert
是一个浏览器功能,因此如果您在浏览器中执行它,它将正常运行。
但需要serialport库?这不会在浏览器中运行。这取决于Node。