You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:35:43