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

Node.js基于给定Mocha测试实现Express产品API的GET/PUT接口求助

解答

前置修正

现有Express框架代码有两处笔误需要先调整:

  • 路由定义的app.getC、app.putC为输入错误,应改为app.get、app.put
  • 路径参数定义为:id,所以取值应为const id = req.params.id,而非req.params._id

i) GET接口实现

你原来的写法混淆了数据层回调返回值和Express响应对象,还存在语法错误,正确代码如下:

app.get('/api/v1/products/:id', function(req, res, next) {
  const id = req.params.id;
  products.read(id, function(err, product) {
    // 操作报错或查询不到对应产品,返回400状态码
    if (err || !product) {
      return res.sendStatus(400);
    }
    // 查询成功返回200状态和产品对象,自带price、quantity属性符合测试要求
    res.status(200).send(product);
  });
});

ii) PUT接口实现

实现逻辑共三步:

  1. 读取请求体中的新产品数据,强制把产品ID设置为路径中的ID,避免用户修改产品ID
  2. 调用数据层update方法执行更新操作
  3. 操作报错返回400,更新成功返回200和更新后的产品对象
app.put('/api/v1/products/:id', function(req, res, next) {
  const id = req.params.id;
  // 覆盖ID防止被修改
  const updateData = { ...req.body, id: id };
  products.update(id, updateData, function(err, updatedProduct) {
    if (err || !updatedProduct) {
      return res.sendStatus(400);
    }
    res.status(200).send(updatedProduct);
  });
});

补充注意项

需要在所有路由定义前添加JSON请求体解析中间件,否则无法读取req.body的内容:

app.use(express.json());

内容的提问来源于stack exchange,提问作者ds0s1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:57:04