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未终止的字符串文字错误的主要内容,如果未能解决你的问题,请参考以下文章