使用
我正在尝试使用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
}