Express异步端点启动报错:SyntaxError参数列表后缺少)求解决
解决Express async/await语法错误问题
最近我在练习用async/await写Express接口,写了个处理产品创建的POST端点,代码如下:
app.post('/products', async (req, res) => { try { console.log('req', req.body); const data = await addProduct(res.body); res.sendStatus(200); } catch(err) { res.sendStatus(500); } });
结果用命令npx babel-node server.js --presets=es2015启动服务器时,直接报了语法错误:
app.post('/products', async function (req, res) { ^^^^^ SyntaxError: missing ) after argument list
问题原因
其实这个错误很明确:你用的es2015(也就是ES6)预设不支持async/await语法。因为async/await是ES2017才正式纳入ECMAScript标准的,es2015预设里没有对应的转换逻辑,Babel没法识别这个语法,所以就报错了。
解决步骤
1. 安装合适的Babel预设
推荐用@babel/preset-env,它会根据你指定的目标环境自动转换所需的语法,比单独装插件更省心。执行下面的命令安装:
npm install --save-dev @babel/preset-env
2. 配置Babel
在项目根目录创建一个.babelrc文件,内容如下:
{ "presets": ["@babel/preset-env"] }
或者如果你习惯把配置写在package.json里,也可以添加这段:
"babel": { "presets": ["@babel/preset-env"] }
3. 调整启动命令
现在不需要指定es2015预设了,直接用下面的命令启动服务器:
npx babel-node server.js
额外小提示
你的代码里还有个小bug:await addProduct(res.body)这里应该是req.body,res.body是用来设置响应体的,不是获取请求参数的,不改的话你拿不到前端传过来的产品数据哦~
内容的提问来源于stack exchange,提问作者fgonzalez
相关产品推荐
相关产品推荐

