使用middy中间件时遭遇Unexpected token '.'语法错误求助
解决Middy中间件引入时的SyntaxError: Unexpected token '.'错误
问题分析
从报错信息SyntaxError: Unexpected token '.'和代码来看,问题出在commonMiddleware.js的语法错误上——你代码里的箭头函数符号被错误写成了HTML转义实体=>,而非JavaScript原生的=>,Node.js无法识别这个转义字符,导致加载模块时触发语法错误。
解决方案
1. 修正commonMiddleware.js的语法错误
将文件里的handler =>替换为正确的箭头函数handler =>,修正后的完整代码如下:
const middy = require('@middy/core'); const { httpErrorHandler } = require('@middy/http-error-handler'); const { httpEventNormalizer } = require('@middy/http-event-normalizer'); const { httpJsonBodyParser } = require('@middy/http-json-body-parser'); module.exports = handler => middy(handler) .use([ httpJsonBodyParser, httpEventNormalizer, httpErrorHandler ]);
2. 确保createAuction.js正确使用中间件
你当前的createAuction.js只引入了中间件,但没有定义业务函数并包装导出,补充完整代码示例:
const uuid = require('uuid'); const AWS = require('aws-sdk'); const commonMiddleware = require('../lib/commonMiddleware'); const dynamodb = new AWS.DynamoDB.DocumentClient(); async function createAuction(event, context) { // 从请求体获取参数 const { title } = event.body; const now = new Date(); // 构造拍卖数据 const auction = { id: uuid.v4(), title, status: 'OPEN', createdAt: now.toISOString(), }; // 写入DynamoDB await dynamodb.put({ TableName: process.env.AUCTIONS_TABLE_NAME, Item: auction, }).promise(); // 返回响应 return { statusCode: 201, body: JSON.stringify(auction), }; } // 用中间件包装业务函数并导出 module.exports.handler = commonMiddleware(createAuction);
验证
修正后重新部署代码,引入commonMiddleware时就不会再触发语法错误,同时Middy的三个中间件会正常生效:
httpJsonBodyParser:自动解析请求体为JSONhttpEventNormalizer:标准化API Gateway事件格式,避免因缺少字段报错httpErrorHandler:自动捕获并格式化错误响应
内容的提问来源于stack exchange,提问作者Ojaswi Awasthi
相关产品推荐
相关产品推荐

