当我的代码中没有语法错误时,为什么会出现 UserCodeSyntaxError?
Why do I get a UserCodeSyntaxError when I have no syntax error in my code?
我目前正在 nodejs 中创建一个 Dialogflow 聊天机器人,在部署我的代码时我收到一条错误消息。我试图取消注释大多数事情,只留下基本功能代码,但我仍然无法让它工作。我不确定这里的问题是什么
'use strict';
import {getAPIresponse} from "./api/index.js";
// const http = require('https');
// const respond = fulfillmentText => {
// return {
// statusCode: 200,
// body: JSON.stringify({
// fulfillmentText
// }),
// headers: {
// "Content-Type": "application/json"
// }
// }
//
// };
module.exports.dining = async (event,context) => {
const incoming= JSON.parse(event.body).queryResult;
console.log(`INCOMING: ${incoming.parameters.hall}`);
const {
displayName
} = incoming.intent;
console.log(displayName);
//const menu = getAPIresponse('https://esb.prod.uds.harvard.edu/api/dining/2.0/','events?locationId=36');
//console.log(menu);
// if(displayName === 'dining'){
// if(incoming.parameters.meal === 'breakfast'){
// //get's dining hall code to include in API request
// const hall = getCode(incoming.parameters.hall);
// //generate response from API based off of parameters passed by user
// const menu = getAPIresponse("https://esb.prod.uds.harvard.edu/api/dining/2.0/","events?locationId=${hall}", hall);
// console.log(menu);
// }
// if(incoming.parameters.meal === 'lunch'){
// //get's dining hall code to include in API request
// const hall = getCode(incoming.parameters.hall);
// //generate response from API based off of parameters passed by user
// const menu = getAPIresponse("https://esb.prod.uds.harvard.edu/api/dining/2.0","/events", hall);
// }
// if(incoming.parameters.meal === 'dinner'){
// //get's dining hall code to include in API request
// const hall = getCode(incoming.parameters.hall);
// //generate response from API based off of parameters passed by user
// const menu = getAPIresponse("https://esb.prod.uds.harvard.edu/api/dining/2.0","/events", hall);
// }
// }
};
几乎所有内容都被注释掉了,但我仍然收到显示
的错误消息
2019-07-02 16:31:33.351 (-04:00) undefined ERROR Uncaught Exception {
"errorType":"Runtime.UserCodeSyntaxError","errorMessage":"SyntaxError: Unexpected tok
en {","stack":["Runtime.UserCodeSyntaxError: SyntaxError: Unexpected token {"," at
_loadUserApp (/var/runtime/UserFunction.js:98:13)"," at Object.module.exports.loa
d (/var/runtime/UserFunction.js:140:17)"," at Object.<anonymous> (/var/runtime/ind
ex.js:36:30)"," at Module._compile (internal/modules/cjs/loader.js:701:30)"," a
t Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)"," at Modu
le.load (internal/modules/cjs/loader.js:600:32)"," at tryModuleLoad (internal/modu
les/cjs/loader.js:539:12)"," at Function.Module._load (internal/modules/cjs/loader
.js:531:3)"," at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)",
" at startup (internal/bootstrap/node.js:283:19)"]}
AWS Lambda 不支持您在此处编写的 ES6 import
说明符
import {getAPIresponse} from "./api/index.js";
因为 Node.js 默认不支持 ES6 import
语法(注意:我的 lambda 运行时设置为 Node.js 10.x)。
插图:
在我的 lambda 发行版的 index.js
文件顶部导入库时,我也遇到了这个问题。
当我使用 import
语法时,堆栈跟踪 Uncaught Exception { "errorType":"Runtime.UserCodeSyntaxError", ... unexpected token import found ... blabla... } ...
被抛入我的 lambda 函数中:
import awsServerlessExpress from 'aws-serverless-express';
exports.handler = (event, context) => {
console.log('hello world!')
};
但在我刚刚使用标准模块 require
语法时,在下面的这个版本中没有。
const awsServerlessExpress = require('aws-serverless-express');
exports.handler = (event, context) => {
console.log('hello world!')
};
对我来说,是 import
语法导致 SyntaxError
异常,但请注意,对您来说,您当前的 JavaScript 语法不支持=59=]运行时会抛出这个异常。
几个解决方案:
将所有 import
语句更改为标准模块 require
语句,并继续使用您配置的 Node.js 运行时支持的任何默认 JavaScript 风格。
在部署到云之前,使用像 Babel 和 Webpack 这样的编译器来编译你的 ES6 JavaScript。
使用下面 Yitzchak 很好地描述的快速解决方案 :) 只需在您的 Lambda 仪表板上修改 NodeJS 版本即可。
对我有用:更新 Node.js 版本的 lambda
我收到此错误是因为 lambda 被定义为使用 Node.js 12.x 执行,当我将其更改为 Node.js 14.x(就像在我的本地机器上一样)有效
如果它有效 - 并且您通常使用 serverless 包来自动部署您的 lambda - 不要忘记更新您的 serverless.yml 相应地归档
有时在 lambda 中,当我们点击 Deploy
时,所有更改都没有部署。刷新页面并检查语法错误。
或者至少这就是我的问题所在。
就我而言,我粘贴了另一个节点版本为 14 的 lambda 的代码。
但是我当前的 lambda 节点版本是 12。
我粘贴的代码在一行中使用了可选链接 (?.)。删除它,部署代码,它工作正常。
如果您使用 TypeScript 并遇到此错误,请确保您在 tsconfig.json
中设置的目标与您的目标 nodejs 版本相匹配。有关推荐设置的列表,请访问 Node Target Mapping
例如,我的目标是 node.js 12 并使用 ES2020
。将其更改为 ES2019
解决了我的问题。
我目前正在 nodejs 中创建一个 Dialogflow 聊天机器人,在部署我的代码时我收到一条错误消息。我试图取消注释大多数事情,只留下基本功能代码,但我仍然无法让它工作。我不确定这里的问题是什么
'use strict';
import {getAPIresponse} from "./api/index.js";
// const http = require('https');
// const respond = fulfillmentText => {
// return {
// statusCode: 200,
// body: JSON.stringify({
// fulfillmentText
// }),
// headers: {
// "Content-Type": "application/json"
// }
// }
//
// };
module.exports.dining = async (event,context) => {
const incoming= JSON.parse(event.body).queryResult;
console.log(`INCOMING: ${incoming.parameters.hall}`);
const {
displayName
} = incoming.intent;
console.log(displayName);
//const menu = getAPIresponse('https://esb.prod.uds.harvard.edu/api/dining/2.0/','events?locationId=36');
//console.log(menu);
// if(displayName === 'dining'){
// if(incoming.parameters.meal === 'breakfast'){
// //get's dining hall code to include in API request
// const hall = getCode(incoming.parameters.hall);
// //generate response from API based off of parameters passed by user
// const menu = getAPIresponse("https://esb.prod.uds.harvard.edu/api/dining/2.0/","events?locationId=${hall}", hall);
// console.log(menu);
// }
// if(incoming.parameters.meal === 'lunch'){
// //get's dining hall code to include in API request
// const hall = getCode(incoming.parameters.hall);
// //generate response from API based off of parameters passed by user
// const menu = getAPIresponse("https://esb.prod.uds.harvard.edu/api/dining/2.0","/events", hall);
// }
// if(incoming.parameters.meal === 'dinner'){
// //get's dining hall code to include in API request
// const hall = getCode(incoming.parameters.hall);
// //generate response from API based off of parameters passed by user
// const menu = getAPIresponse("https://esb.prod.uds.harvard.edu/api/dining/2.0","/events", hall);
// }
// }
};
几乎所有内容都被注释掉了,但我仍然收到显示
的错误消息2019-07-02 16:31:33.351 (-04:00) undefined ERROR Uncaught Exception {
"errorType":"Runtime.UserCodeSyntaxError","errorMessage":"SyntaxError: Unexpected tok
en {","stack":["Runtime.UserCodeSyntaxError: SyntaxError: Unexpected token {"," at
_loadUserApp (/var/runtime/UserFunction.js:98:13)"," at Object.module.exports.loa
d (/var/runtime/UserFunction.js:140:17)"," at Object.<anonymous> (/var/runtime/ind
ex.js:36:30)"," at Module._compile (internal/modules/cjs/loader.js:701:30)"," a
t Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)"," at Modu
le.load (internal/modules/cjs/loader.js:600:32)"," at tryModuleLoad (internal/modu
les/cjs/loader.js:539:12)"," at Function.Module._load (internal/modules/cjs/loader
.js:531:3)"," at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)",
" at startup (internal/bootstrap/node.js:283:19)"]}
AWS Lambda 不支持您在此处编写的 ES6 import
说明符
import {getAPIresponse} from "./api/index.js";
因为 Node.js 默认不支持 ES6 import
语法(注意:我的 lambda 运行时设置为 Node.js 10.x)。
插图:
在我的 lambda 发行版的 index.js
文件顶部导入库时,我也遇到了这个问题。
当我使用 import
语法时,堆栈跟踪 Uncaught Exception { "errorType":"Runtime.UserCodeSyntaxError", ... unexpected token import found ... blabla... } ...
被抛入我的 lambda 函数中:
import awsServerlessExpress from 'aws-serverless-express';
exports.handler = (event, context) => {
console.log('hello world!')
};
但在我刚刚使用标准模块 require
语法时,在下面的这个版本中没有。
const awsServerlessExpress = require('aws-serverless-express');
exports.handler = (event, context) => {
console.log('hello world!')
};
对我来说,是 import
语法导致 SyntaxError
异常,但请注意,对您来说,您当前的 JavaScript 语法不支持=59=]运行时会抛出这个异常。
几个解决方案:
将所有
import
语句更改为标准模块require
语句,并继续使用您配置的 Node.js 运行时支持的任何默认 JavaScript 风格。在部署到云之前,使用像 Babel 和 Webpack 这样的编译器来编译你的 ES6 JavaScript。
使用下面 Yitzchak 很好地描述的快速解决方案 :) 只需在您的 Lambda 仪表板上修改 NodeJS 版本即可。
对我有用:更新 Node.js 版本的 lambda
我收到此错误是因为 lambda 被定义为使用 Node.js 12.x 执行,当我将其更改为 Node.js 14.x(就像在我的本地机器上一样)有效
如果它有效 - 并且您通常使用 serverless 包来自动部署您的 lambda - 不要忘记更新您的 serverless.yml 相应地归档
有时在 lambda 中,当我们点击 Deploy
时,所有更改都没有部署。刷新页面并检查语法错误。
或者至少这就是我的问题所在。
就我而言,我粘贴了另一个节点版本为 14 的 lambda 的代码。 但是我当前的 lambda 节点版本是 12。 我粘贴的代码在一行中使用了可选链接 (?.)。删除它,部署代码,它工作正常。
如果您使用 TypeScript 并遇到此错误,请确保您在 tsconfig.json
中设置的目标与您的目标 nodejs 版本相匹配。有关推荐设置的列表,请访问 Node Target Mapping
例如,我的目标是 node.js 12 并使用 ES2020
。将其更改为 ES2019
解决了我的问题。