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接口实现
实现逻辑共三步:
- 读取请求体中的新产品数据,强制把产品ID设置为路径中的ID,避免用户修改产品ID
- 调用数据层
update方法执行更新操作 - 操作报错返回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
相关产品推荐
相关产品推荐

