我目前正在 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
文件顶部导入库时,我也遇到了这个问题。
当我使用
Uncaught Exception { "errorType":"Runtime.UserCodeSyntaxError", ... unexpected token import found ... blabla... } ...
语法时,堆栈跟踪 import
被抛出到我的 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
异常,但请注意,对于您来说,当前 Node.js 运行时不支持的任何 JavaScript 语法都会抛出此异常。
几个解决方案:
将所有
import
语句更改为标准模块 require
语句,并继续使用您配置的 Node.js 运行时支持的任何默认 JavaScript 风格。
在部署到云之前,使用 Babel w/ Webpack 等转译器来转译 ES6 JavaScript。
使用下面由 Yitzchak 详细描述的快速解决方案:) 只需在 Lambda 仪表板上更改 NodeJS 版本即可。
就我而言,我粘贴了另一个节点版本为 14 的 lambda 代码。 但我当前的 lambda 节点版本是 12。 我粘贴的代码在一行中使用了可选链接(?.)。删除它,部署代码,效果很好。
有时在 lambda 中,当我们单击
Deploy
时,所有更改都不会部署。刷新页面并检查语法错误。
或者至少这就是我的情况的问题所在。
如果您使用 TypeScript 并遇到此错误,请确保您在
tsconfig.json
中设置的目标与您的目标 Nodejs 版本匹配。有关推荐设置的列表,请访问节点目标映射
例如,我的目标是node.js 12并使用
ES2020
。将其更改为 ES2019
解决了我的问题。
就我而言,我更改了
tsconfig.json
module
设置:
"module": "es2015"
到
"module": "CommonJS",
我见过这些错误发生在运行时失败时
比如我写了一个没有结束大括号的 if/else 块。因此,请确保您的代码正确“编译”
就我而言,问题是由“;”引起的在下面我的代码的块中,与所描述的错误非常相似 -
"SyntaxError: Unexpected token ';'"
。
const putReqs = batch.map(item => ({
PutRequest: {
Item: item;
}
}))
const req = {
RequestItems: {
tmp-customer-address: putReqs;
}
}
一旦我移动了“;”在代码块之外,它解决了问题。
const putReqs = batch.map(item => ({
PutRequest: {
Item: item
}
}));
const req = {
RequestItems: {
'tmp-customer-address': putReqs
}
};