等待设备并将响应发送到网页



我正在尝试使用NPM中的NFC模块读取SmartCard并将结果发送到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',...是冻结的原因。

,但我无法找到一种避免这种情况的方法...

谢谢

欢呼

分析源


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");
}

在您的示例中导致以下示例:

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 
}

相关内容

  • 没有找到相关文章

最新更新