如何从工作节点jssocket io串口切换到node express路由器?

Switching from working node js socket io serialport to node express router how to?

提问人:Dikembe 提问时间:1/5/2023 更新时间:1/8/2023 访问量:40

问:

我是 node express 的新手(很久以前就开始使用 node,但没有做太多事情),我想学习如何使用它。我正在浏览我的一些旧作品并阅读很多教程,但我似乎无法让这个工作。 我有这个应用程序,可以从串行端口上的一些传感器读取数据并将其发送到 sesors.ejs。我想用快递重新编程它。我在终端中有传感器读数,但在 ejs 中没有。

旧(工作)app.js

var http = require('http');
var fs = require('fs');
var url = require('url');
var path = require('path');

const { SerialPort } = require('serialport')
const { ByteLengthParser } = require('@serialport/parser-byte-length')
const port = new SerialPort({ path: 'COM4', baudRate: 9600 })
const parser = port.pipe(new ByteLengthParser({ length: 30 }))

var sensors = fs.readFileSync('views/sensors.ejs');

var app = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type':'text/html'});
res.end(sensors);
});

var io = require('socket.io').listen(app);
io.on('connection', function(data){
console.log
});

parser.on('data', function(data){
console.log(data.toString("UTF8"));
io.emit('data', data.toString("UTF8"))
});

app.listen(3000);

旧的(工作)sensors.ejs

<script>    
var socket = io();
socket.on('data', function(data){...} 
</script>

这很好用。

我经历了几个快速路由教程,但我不知道如何将io数据发送到路由器

我在路由目录中c/p了从旧app.js到新sensor.js的大部分代码,没有fs,app.listen等。我有 c/p sensors.ejs 到 views 文件夹。

在新app.js我有:

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var sensorsRouter = require('./routes/senzori');

var app = express();

app.set('views', path.join(\__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(\__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/senzori', sensorsRouter);

index.ejs 和 users.ejs(获取 MySQL 数据)正在工作(Express 已安装并工作)

谢谢

高速 套接字 IO

评论


答:

0赞 Dikembe 1/8/2023 #1

我已经找到了解决方案。如果其他任何像我这样“知识”水平的人需要解决方案,这里是:

我已将读取串行端口移至 bin/www

sensors.js中唯一的代码是:

router.get('/', function(req, res, next) {
  res.render('sensors');
});