我如何在“二进制解析器”格式化程序中使用“momentjs”?
How can i use ‚momentjs‘ in a ‚binary-parser‘ formatter?
谁能帮帮我。我如何在格式化程序中使用 moment?
我认为这不是节点或二进制解析器的问题。我认为这是我的理解。
const Parser = require("binary-parser").Parser;
const moment = require('moment');
let time = function(timestamp) {
return moment(timestamp, 'YYMMDDHHmmssSS').format('YYYY-MM-DD HH:mm:ss.SS');
};
let Telegram = new Parser()
.string('timestamp', {encoding: 'hex', length: 7, formatter: time});
例外情况是:
evalmachine.:9
return moment(timestamp, 'YYMMDDHHmmssSS').format('YYYY-MM-DD HH:mm:ss.SS');
^
ReferenceError: moment is not defined
at Parser. (evalmachine.:9:2)
...
我认为问题是解析器不知道时刻。但我怎么能意识到呢?
我试图直接在二进制解析器模块中导入时刻。但它不起作用。
如果我 运行 片刻在解析器之外,那么它正在工作。
也许有人可以帮助我。
formatter
函数在没有 momentjs
上下文的情况下运行。我猜是因为它消耗 formatter
属性 的方式。在代码中找到here,代码为:
if (this.code.formatter) {
... (ctx, varName, this.options.formatter)
由于 this
关键字的 funny 工作方式,它绑定到对象 (options
) 并且因为该声明不包含 momentjs
,它说它没有定义。
您可以通过查看行 735
:
来更好地理解这一点
ctx.pushCode("{0} = ({1}).call(this, {0});", varName, formatter);
它绑定到当前对象。
P.S.: 我复制了代码并将其粘贴到 Node.js 上,它运行良好。 ^这是一个可能的解释。
谁能帮帮我。我如何在格式化程序中使用 moment?
我认为这不是节点或二进制解析器的问题。我认为这是我的理解。
const Parser = require("binary-parser").Parser;
const moment = require('moment');
let time = function(timestamp) {
return moment(timestamp, 'YYMMDDHHmmssSS').format('YYYY-MM-DD HH:mm:ss.SS');
};
let Telegram = new Parser()
.string('timestamp', {encoding: 'hex', length: 7, formatter: time});
例外情况是:
evalmachine.:9
return moment(timestamp, 'YYMMDDHHmmssSS').format('YYYY-MM-DD HH:mm:ss.SS');
^
ReferenceError: moment is not defined
at Parser. (evalmachine.:9:2)
...
我认为问题是解析器不知道时刻。但我怎么能意识到呢? 我试图直接在二进制解析器模块中导入时刻。但它不起作用。
如果我 运行 片刻在解析器之外,那么它正在工作。
也许有人可以帮助我。
formatter
函数在没有 momentjs
上下文的情况下运行。我猜是因为它消耗 formatter
属性 的方式。在代码中找到here,代码为:
if (this.code.formatter) {
... (ctx, varName, this.options.formatter)
由于 this
关键字的 funny 工作方式,它绑定到对象 (options
) 并且因为该声明不包含 momentjs
,它说它没有定义。
您可以通过查看行 735
:
ctx.pushCode("{0} = ({1}).call(this, {0});", varName, formatter);
它绑定到当前对象。
P.S.: 我复制了代码并将其粘贴到 Node.js 上,它运行良好。 ^这是一个可能的解释。