【发布时间】:2022-01-11 14:08:54
【问题描述】:
我创建了一个节点应用程序,用于获取 json 格式的日志文件,在处理数据后,我们创建一个 csv 文件。我在应用程序中使用以下软件包
"dependencies": {
"bluebird":"^3.7.2",
"js-yaml":"^4.1.0",
"json2csv":"^5.0.6",
"node-jq": "^1.12.0",
"yargs": "^17.0.1"
}
该应用在过去 6 个月内一直正常运行,并且代码没有任何变化。我们在 5 天前进行了计划部署,但此后它没有生成报告,当我们尝试生成文件时出现此错误。
events.js:377 投掷者; // 未处理的“错误”事件 ^
Error: spawn C:\reporting-app\node_modules\node-jq\bin\jq ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:274:19)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:82:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:280:12)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
errno: -4058,
code: 'ENOENT',
syscall: 'spawn C:\\reporting-app\\node_modules\\node-jq\\bin\\jq',
path: 'C:\\reporting-app\\node_modules\\node-jq\\bin\\jq',
spawnargs: [
'--slurp',
'[ .[] .logs[] ] | map(select(.context.recordID != "12345")) | unique_by(.context.ID) | map(select(.context.ID != null)) | map({ ID: .context.ID, timestamp: .timestamp, kiosk: .context.recordID, appTransactionId: .context.appTransactionId })'
]}
我认为当我们尝试使用 node-jq.run 方法时会出现错误(见下文)
execute(source) {
return jq.run(this.query, source, {
input: 'string',
slurp: true,
});
}
我们将不胜感激。
【问题讨论】:
-
如果你真的卡住了,可能最简单的方法是获取你传入的字符串,并使用
JSON.parse将其转换为 js 对象,然后将您的查询转换为过滤和选择。我的建议的一个问题是它会同步发生,所以如果你正在运行一个 web 服务器,并且它是一个大操作,它可能会锁定事情 -
你说得对,我觉得这是现在唯一的出路。