【问题标题】:Wait for a device and serve response to a web page等待设备并响应网页
【发布时间】:2019-06-27 19:59:38
【问题描述】:

我正在尝试使用 npm 中的 nfc 模块来读取智能卡并将结果发送到 Web 界面。

只要我的读卡器插上电源,一切都很顺利。 但是,如果没有插入读卡器,Web 服务器 (nodejs) 会冻结并且不提供页面。

这是我在utils.js中的代码:

exports.rfidPolling = function(socket){
        var nfc = new NFC()
        nfc.on('reader', reader => {                
                reader.autoProcessing = false;
                reader.aid = 'F222222222';
                notifyFn(socket,`${reader.reader.name}  device attached`)
                ...
        })
        nfc.on('error', err => {
                console.log('an error occurred', err);
                errorFn(socket,`An error occured : ${err}`)
        });

}

在我的文件server.js 中,我调用rfidPolling 函数如下:

... 
var io = require('socket.io').listen(server);
io.on('connection', function(socket){
    utils.rfidPolling(socket)
})
...

我认为nfc.on('reader',... 是它冻结的原因。

但我想不出办法避免这种情况......

谢谢

干杯

【问题讨论】:

  • 尝试将其包含在 try 块中?
  • 你做nfc.start() 吗?您的notifyFn 是退出路径吗?您是否尝试设置断点?我的猜测是由于没有实际阅读,您的回调永远不会被调用? - 但是插入卡时它可以工作吗?奇怪...

标签: javascript node.js nfc pcsc


【解决方案1】:

分析source


class NFC: public Nan::ObjectWrap {
  public:
    static NAN_METHOD(New);
    static NAN_METHOD(Start);
    static NAN_METHOD(Stop);

nfc.Start处理:

nfc_device *pnd;
...
pnd = nfc_open(context, ...)

nfc_open

如果没有设备 pnd 将是 null 并因此触发:

if (pnd == NULL) {
   nfc_exit(context);
   return Nan::ThrowError("unable open NFC device");
}

leads 在您的示例中为:

errorFn(socket,\`An error occured : ${err}\`)

尝试一些想法:

exports.rfidPolling = function(socket){
        var nfc = new NFC()
        nfc.on('reader', reader => {                
                reader.autoProcessing = false;
                reader.aid = 'F222222222';
                notifyFn(socket,`${reader.reader.name}  device attached`)
                ...
        })
        nfc.on('error', err => {
                console.log('an error occurred', err);
                errorFn(socket,`An error occured : ${err}`)
        });
        setTimeout(function(){
            nfc.Stop()
            notifyFn(socket,`${null} device timeout`)
        }, 4000)
        nfc.Start() // undefined | Error 
}

【讨论】:

    猜你喜欢
    • 2019-07-17
    • 2019-12-20
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多