NodeJS SyntaxError: Unexpected token 我该如何尝试修复?

问题描述

我是 NodeJS 的新手,运行节点应用程序时遇到以下问题:

andrea@ubuntu:~/Documents/XXX/custom-dashboard-be$ npm run dev

> custom-dashboard-be@1.6.0 dev /home/andrea/Documents/XXX/custom-dashboard-be
> cross-env NODE_ENV=development nodemon src/index.js

[nodemon] 2.0.7
[nodemon] to restart at any time,enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node src/index.js`
/home/andrea/Documents/XXX/custom-dashboard-be/src/utils/esMapper.js:29
    if(data.result && data.result.body && data.result.body?.aggregations["2"]?.buckets.length > 0) {
                                                           ^

SyntaxError: Unexpected token .
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/home/andrea/Documents/XXX/custom-dashboard-be/src/controllers/elastic.controller.js:5:109)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
[nodemon] app crashed - waiting for file changes before starting...

错误似乎出现在这esMapper.js 类的第 29 行,也就是这个方法的第一个 if 语句:

const esSudoEventsAndHostnamesMapper = async (data) => {

    if(data.result && data.result.body && data.result.body?.aggregations["2"]?.buckets.length > 0) {
        let aggregations = data.result.body.aggregations["2"].buckets;

        aggregations.map((event) => {
            let totalCount = event.doc_count;
            event["3"].buckets.map(nestedEvent => {
                nestedEvent.percentage = ((nestedEvent.doc_count / totalCount) * 100).toFixed(2);
            })
        })

        data.result.body.aggregations["2"].buckets = aggregations;
    }
    return data;
}

为什么?我该如何尝试解决此问题?

解决方法

您的问题似乎是在不受支持的节点版本中使用了 optional chaining operator,这很可能是 (<14)。请记住,只有节点 14 及更高版本可以支持这一点。

但我知道您可以使用选项 (--harmony) 来启用一些新功能,但我之前还没有测试过。

简而言之,解决方案要么更新您的节点版本 >=14,要么尝试使用 node --harmony src/index.js

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...