Javascript未终止的字符串文字错误

Posted

技术标签:

【中文标题】Javascript未终止的字符串文字错误【英文标题】:Javascript Unterminated string literal error 【发布时间】:2018-10-16 11:16:55 【问题描述】:

我想知道是否有人可以帮助我。

我一直在努力解决我在这里收到的帮助:Dynamic Table and Dataset in Scheduled BigQuery Job

我已尝试运行代码,但我认为存在固有问题,因为当我运行代码(如下)时,我在此行收到错误:

 "query": "SELECT

错误是“未终止的字符串文字”

    function runQuery() 

          var yesterday = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy'T'HH:mm:ss'Z'");

          var configuration = 
          "query": 
            "useQueryCache": false,
            "destinationTable": 
                  "projectId": "project_name_obfuscated",
                  "datasetId": "project_114151_shared",
                  "tableId": "test123"
                ,
            "writeDisposition": "WRITE_TRUNCATE",
            "createDisposition": "CREATE_IF_NEEDED",
            "allowLargeResults": true,
            "query": "SELECT * 
FROM (SELECT hits.page.pagePath
FROM
[project:dataset.ga_sessions_20181015] 
WHERE
REGEXP_MATCH( hits.page.pagePath, r'\?email=.*@.*\.*')),
(SELECT
hits.eventInfo.eventLabel
FROM
[project:dataset.ga_sessions_20181015] 
WHERE
hits.eventInfo.eventAction = 'end-client,role,decision')"
      
    ;

    var job = 
        "configuration": configuration
    ;

    var jobResult = BigQuery.Jobs.insert(job, "project_name_obfuscated");

    var jobId = jobResult.jobReference.jobId;

    // The job might not actually be done; wait until it is marked
    // complete.
    var sleepTimeMs = 500;
    while (true) 
        Utilities.sleep(sleepTimeMs);
        sleepTimeMs *= 2;
        queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, 
          "maxResults": 10000);
        if (!queryResults.jobComplete) 
          break;
        
    

我已经阅读了各种教程并尝试添加 ' + 解决方案,因此该行变为“查询”:' SELECT +

但我仍然无法让脚本运行。

谁能指出我哪里出错了?

非常感谢和亲切的问候!!

【问题讨论】:

您需要显示"query": "SELECT <script continues> 之后的内容,因为事实上,问题很明显......该行没有关闭" - 您正确显示代码的方式很棒直至失败,但您所展示的显然不是您实际代码的全部范围 如果我们看到所有代码而不是 unterminated string literal 会有所帮助:) 查询有误。将这将生成的实际 SQL 代码记录到控制台并尝试直接在 SQL 服务器上运行代码。那你就知道哪一行SQL不对了,可以看一下JS代码,看看配置对象的哪一部分出错了。对于“未终止的字符串错误”,我有一种预感,您没有正确地转义某些字符串。请记住,根据您使用的数据库类型,您必须转义单引号或双引号以及其他在 SQL 中有意义的字符。 由于 `` 引号是 mysql 分隔符,`` 也是 javascript 字符串模板文字,您是否有机会通过 babel 或其他 ES6 转译器运行此代码?因为这可能会将` 分解为'+',这将产生无效的SQL。 那么它是多行的。 " 没有在第 1 行终止。使用 \+ developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 加入他们的应用脚本不是 ES2015。所以你不能使用 `` 【参考方案1】:

正如用户TheMaster 在评论中指出的那样,错误来自格式错误的多行字符串:

那么它是多行的。 " 未在第 1 行终止。使用 \+ developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 加入他们的应用脚本不是 ES2015。所以你不能使用``

所以代码应该看起来接近这个:

"query": "SELECT * " +
"FROM (SELECT hits.page.pagePath " +
"FROM " +
"[project:dataset.ga_sessions_20181015] " +
"WHERE " +
"REGEXP_MATCH( hits.page.pagePath, r'\?email=.*@.*\.*')), " +
"(SELECT " +
"hits.eventInfo.eventLabel "+
"FROM " +
"[project:dataset.ga_sessions_20181015] " +
"WHERE " +
" hits.eventInfo.eventAction = 'end-client,role,decision')"

【讨论】:

以上是关于Javascript未终止的字符串文字错误的主要内容,如果未能解决你的问题,请参考以下文章

如果 HTML 包含空格,则 JQuery HTML 未终止的字符串文字错误

未终止的字符串文字 jquery 或更多

Javascript中的多行警报

未闭合字符文字错误

MVC3 未终止的字符串常量语法错误

创建函数错误错误:在“$$”处或附近未终止的美元引号字符串