Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >暂停Node.js可读数据流

暂停Node.js可读数据流
EN

Stack Overflow用户
提问于 2017-08-11 01:24:40
回答 1查看 195关注 0票数 0

我正在使用node-serialport构建一个条形码扫描应用程序。我遇到的问题是进行AJAX调用以触发扫描,然后让Express服务器使用可读数据流中的数据进行响应。

初始化设备:

代码语言:javascript
运行
AI代码解释
复制
// Open device port    
var SerialPort = require('serialport');
var port = '/dev/cu.usbmodem1411';
var portObj = new SerialPort(port, (err) => {
 if(err) {
  console.log('Connection error ' + err);
 }
});

//Construct device object
var Scanner = {
  // Trigger Scan
  scan : () => {
    portObj.write(<scan cmd>), (err) => {
      if(err) {
        console.log('Error on scan' + err);
      }
    });
  }
}

我已经尝试了两种方法,但都没有产生我想要的“扫描-读取-响应”行为。

首先,我尝试在扫描之后立即放置一个事件侦听器,然后在侦听器中使用回调来响应AJAX请求。使用这种方法,我得到一个“发送‘错误’后无法设置标头”。据我所知,Node抛出这个错误是因为res.send被多次调用。

第一种方法--在侦听器中以回调的形式响应:

代码语言:javascript
运行
AI代码解释
复制
app.get('/dashboard', (req, res) => {
 Scanner.scan(); //fire scanner
 portObj.on('data', (data) => {
  res.send(data); //'Can't set headers after they are sent' error'
 });
}

在第二种方法中,我将扫描数据存储到一个局部变量('scanned_data')中,并将响应移到侦听器块之外。这种方法的问题是,res.send在扫描的数据在本地变量中被捕获之前执行,因此显示为“未定义”。同样耐人寻味的是,在监听程序块中捕获的scanned_data似乎在每次扫描时都有多个。

第二种方法--监听程序外部响应:

代码语言:javascript
运行
AI代码解释
复制
app.get('/dashboard', (req, res) => {
  var scanned_data; //declare variable outside listener block
  Scanner.scan(); //trigger scan
  portObj.on('data', (data) => {
    scanned_data = data;
    console.log(scanned_data); //displays scanned data but data multiplies with each scan. (e.g. 3 triggers logs 'barcode_data barcode_data barcode_data')  
  });
  console.log(scanned_data); //undefined
  res.send(scanned_data);
}

我是一名前端开发人员,但为了弄清楚这一点,我学到了很多关于Node的知识。遗憾的是,我想我已经走到了死胡同。我修改了.pipe()命令,有一种预感,那就是解决方案所在,但我不能专注于一个有效的解决方案。

有什么想法或建议吗?

EN

回答 1

Stack Overflow用户

发布于 2017-08-11 01:57:06

您不应该对您在'data'事件中获得的数据块做出假设。应为一个字节或多个字节。您需要知道正在使用的底层协议,以便知道您何时收到完整的“消息”,以便您可以停止侦听数据。此时,您应该向HTTP请求发送一个响应。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45625593

复制
相关文章
垂直菜单特效--移动端
垂直菜单显示收缩特效–移动端浏览器版 并且实现去除点击事件300ms的阴影效果 css html { height: 100%; width: 100%; font-size: 100px; outline: 0;} body { height: 100%; margin: 0; position: relative;background: #efeff4;} .ui-header h1{font-size: 20px;text-align: center;color: #3b3c40;margin-
White feathe
2021/12/08
8690
垂直菜单特效--移动端
自定义实现垂直滚动的TextView
通过控制y参数可实现文字不同的垂直距离,这里的x,y并不代表默认横向坐标为0,纵向坐标为0的坐标,具体详解我觉得这篇博客解释的比较清楚,我们主要关注的是参数y的控制,y其实就是text的baseline,这里还需要解释text的杰哥基准线:
大大大大大先生
2018/09/04
1.9K0
自定义实现垂直滚动的TextView
子元素滚动,父元素不滚动
这个是为了处理在bootstrap框架中的iframe 滚动条的问题,查找到的解决方案
solate
2019/07/22
4.2K0
ViewFlipper-仿淘宝垂直广告滚动
viewflipper的子布局item_viewflipper.xml,下面是效果图,自己写,不会没招。
android_薛之涛
2018/09/12
2.4K0
ViewFlipper-仿淘宝垂直广告滚动
第48天:垂直滚动条
垂直滚动条 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style> 7 .box { 8 width: 300px; 9 height: 500px; 10 border: 1px solid red; 11
半指温柔乐
2018/09/11
6740
第48天:垂直滚动条
css如何隐藏垂直滚动条但同时需保持滚动
在写前端页面时,对于超出的内容,我们希望隐藏,同时保持垂直的滚动,但是又不希望有丑陋的垂直滚动条,那该怎么去实现呢
itclanCoder
2023/02/26
2.3K0
css如何隐藏垂直滚动条但同时需保持滚动
【答疑释惑】固定菜单滚动
分享一下滚动菜单源码,可以直接用,希望对盟友有帮助 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>test</title> <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.8.3/jquery.min.js"></script> <style type="text/css"> *{ margi
程序员互动联盟
2018/03/13
1.1K0
jQuery无缝图片横向(水平)/竖向(垂直)滚动
jQuery的一个不错的小插件,记性越来越差了,整理一下贴在这里,方便以后Copy & Paste <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title> </title> <script typ
菩提树下的杨过
2018/01/22
17.5K0
Ant Design Pro 中 点击子菜单的时候,其他菜单不自动收起来
记录一波自己在这段时间碰到的一个Ant Design Pro 的坑:  每次点击菜单都会将其他菜单自动收起来,导致一系列的用户体验不佳。
TimothyJia
2022/12/10
1.6K0
Android-SubMenu选项菜单和子菜单
简介: SubMenu:代表一个子菜单,包含1~N个MenuItem 实现效果: 具体实现方法: 主活动 MainActivity: public class MainActivity extends AppCompatActivity { //定义 “字体大小” 菜单项的标识 final int FONT_10 = 0x111; final int FONT_12 = 0x112; final int FONT_14 = 0x113; final int FON
圆号本昊
2021/09/24
1.3K0
Android-SubMenu选项菜单和子菜单
vue elementui navmenu 多级导航菜单(水平、垂直)
NavMenu.vue的<el-menu-item中加上:route="navMenu.entity.value"
全栈程序员站长
2022/09/17
8K0
vue elementui navmenu 多级导航菜单(水平、垂直)
ST7789 SPI LCD硬件垂直滚动功能的使用
小熊派开发板的 LCD 小屏幕使用是ST7789驱动IC,之前一直有在该块屏幕上实现滚动显示的想法,最初构想在MCU侧创建一个大的队列,将整个屏幕显示内容交由队列管理,然后不停的去整屏刷新以实现屏幕滚动。
Mculover666
2021/07/01
3.5K0
MFC 控件编程之水平滚动条跟垂直滚动条
  首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置.
IBinary
2019/05/25
2.9K0
ST7789 SPI LCD硬件垂直滚动功能的使用
小熊派开发板的 LCD 小屏幕使用是ST7789驱动IC,之前一直有在该块屏幕上实现滚动显示的想法,最初构想在MCU侧创建一个大的队列,将整个屏幕显示内容交由队列管理,然后不停的去整屏刷新以实现屏幕滚动。
杨源鑫
2021/07/07
2K0
ST7789 SPI LCD硬件垂直滚动功能的使用
如何纯CSS实现标题栏、表格头水平滚动垂直不滚动
有些报表会很宽,浏览器水平放不下,需要水平滚动显示,这个可以设置overflow-y:hidden实现,很基本的实现,没什么难度。
周陆军博客
2023/05/07
1.7K0
【说站】python PyQt子菜单的使用
以上就是python PyQt子菜单的使用,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/24
8800
python开发_tkinter_多级子菜单
==========================================================
Hongten
2018/09/13
2K0
python开发_tkinter_多级子菜单
点击加载更多

相似问题

日期格式无效-颤动/省道

245

将秒格式化为可读格式

20

将双格式格式化为纬度/经度可读格式

57

将日期格式化为人类可读格式

77

将JSON文本格式化为可读格式

140
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档